一篇文章带你了解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中面向对象编程的相关知识
May 25 Python
Python实现telnet服务器的方法
Jul 10 Python
Python探索之pLSA实现代码
Oct 25 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Python中collections模块的基本使用教程
Dec 07 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
Python必备技巧之函数的使用详解
Apr 04 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python检测服务器是否正常
2014/02/16 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
购买原创艺术品:Zatista
2019/11/09 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
最新销售员个人自荐信
2013/09/21 职场文书
师德师风自我评价范文
2014/09/11 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
社团招新宣传语
2015/07/13 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
微信小程序和php的登录实现
2021/04/01 PHP