一篇文章带你了解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 05 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
简单了解OpenCV是个什么东西
Nov 10 Python
全面分析Python的优点和缺点
Feb 07 Python
python学生管理系统代码实现
Apr 05 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python中字符串List按照长度排序
Jul 01 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python 命名规范知识点汇总
Feb 14 Python
简单了解python关键字global nonlocal区别
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 中使用随机数的三个步骤
2006/10/09 PHP
php中目录,文件操作详谈
2007/03/19 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
js Date概念详细介绍
2013/11/22 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
javascript每日必学之循环
2016/02/19 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
sklearn的predict_proba使用说明
2020/06/28 Python
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
应届生护士求职信
2013/11/01 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
学校教学管理制度
2015/08/06 职场文书
《灰雀》教学反思
2016/02/19 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python