一篇文章带你了解Python和Java的正则表达式对比


Posted in Python onSeptember 15, 2021

参考资料:

  1. 正则表达式语法?菜鸟教程
  2. Java正则表达式实现

简单批量替换

举例:将and 批量替换为&&

Python实现

import re
def transformSimple(fromRegex, toText, inText):
    return re.sub(fromRegex, toText,inText, flags =re.I)
if __name__ == "__main__":
    inText = "x =1 and y =2"
    fromRegex = " and "
    toText = " && "
    outText = transformSimple(fromRegex,toText,inText )
    print(outText)
	## OUTPUT: x =1 && y =2

Java实现

import java.util.*;
import java.util.regex.*;
public class RegexTest {
	private static String transformSimple(String regexPattern, String replText, String inText){
        return Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE).matcher(inText).replaceAll(replText);
    }
    public static void main(String[] args) {
	    String input = "x =1 and y =2";
        String patternString =" and ";
        String toText = " && ";
        String outText ="";
        outText = transformSimple(patternString, toText, input);
        System.out.println("RESULT: " + outText);
}

// RESULT: x =1 && y =2

复杂模板替换

举例:将x in (1,2)批量替换为[1,2].contains(x)

分析: 模板化

  • 输入分组捕获 (\S+)\s+in\s*\((.+?)\)
  • 输出分组填写 [@2].contains(@1) ? @1和@2分别对应分组捕获中的第1组和2组。

Python实现

import re
def transformComplex(fromRegex, toText, inText):
    regObj = re.compile(fromRegex, flags =re.I)
    for match in regObj.finditer(inText):
        index = 1
        outText = toText
        for group in match.groups():
            outText = outText.replace("@"+str(index), group)
            index +=1
        inText = inText.replace(match.group(0), outText)
    return inText
if __name__ == "__main__":
    fromRegex = "(\S+)\s+in\s*\((.+?)\)"
    toText = "[@2].contains(@1)"
    inText = "x in (1,2) and y in (3,4)"
    outText22 = transformComplex(fromRegex, toText, inText)
    print(outText22)
    ## OUTPUT: [1,2].contains(x) and [3,4].contains(y)

Java实现

import java.util.*;
import java.util.regex.*;
public class RegexTest {
	private static String transformComplex(String regexPattern, String replText, String inText){
        Pattern pattern = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(inText);
        String outText ="";
        while (matcher.find()){
            outText =  replText;
            for (int i =1; i <= matcher.groupCount(); i++){
                outText = outText.replace("@"+i, matcher.group(i));
            }
            inText = inText.replace(matcher.group(0), outText);
        }
        return inText;
    }
    public static void main(String[] args) {
        String input = "x in (1,2) and y in (3,4)";
        String patternString ="(\\S+)\\s+in\\s*\\((.+?)\\)";
        String toText = "[@2].contains(@1)";
        String outText ="";
        outText = transformComplex(patternString, toText, input);
        System.out.println("RESULT: " + outText);
    }
}
// RESULT: [1,2].contains(x) and [3,4].contains(y)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Python 相关文章推荐
详解Python的单元测试
Apr 28 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
关于Keras Dense层整理
May 21 Python
python打包多类型文件的操作方法
Sep 21 Python
Python编程编写完善的命令行工具
Sep 15 #Python
python可视化之颜色映射详解
python的变量和简单数字类型详解
Sep 15 #Python
深入浅析Django MTV模式
python 进阶学习之python装饰器小结
Sep 04 #Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 #Python
关于python爬虫应用urllib库作用分析
You might like
由php if 想到的些问题
2008/03/22 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP 转义使用详解
2013/07/15 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
日期 时间js控件
2009/05/07 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
用JS实现轮播图效果(二)
2016/06/26 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
东方通信股份有限公司VC面试题
2014/08/27 面试题
环保倡议书100字
2014/05/15 职场文书
我的中国梦口号
2014/06/16 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
人与自然的观后感
2015/06/18 职场文书
《月光曲》教学反思
2016/02/16 职场文书
python实现简单聊天功能
2021/07/07 Python
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS