一篇文章带你了解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复制目录结构脚本代码分享
Mar 06 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python处理二进制数据的方法
Jun 03 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Django入门使用示例
Dec 12 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
浅谈PHP中的
2016/04/23 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
js实现日历
2020/11/07 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python中给List添加元素的4种方法分享
2014/11/28 Python
简述Python中的进程、线程、协程
2016/03/18 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
九年级数学教学反思
2014/02/02 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python