一篇文章带你了解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 20 Python
对python append 与浅拷贝的实例讲解
May 04 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
简单了解python的内存管理机制
Jul 08 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
Python reques接口测试框架实现代码
Jul 28 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 Python
python xlwt模块的使用解析
Apr 13 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中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
webpack打包js的方法
2018/03/12 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python统计一个文本中重复行数的方法
2014/11/19 Python
浅谈五大Python Web框架
2017/03/20 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python列表操作方法详解
2020/02/09 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
性能服装:HYLETE
2018/08/14 全球购物
市三好学生主要事迹
2014/01/28 职场文书
党的生日活动方案
2014/08/15 职场文书
入股协议书范本
2014/11/01 职场文书
财务工作失职检讨书
2014/11/21 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
销售经理工作检讨书
2015/02/19 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
python实现批量移动文件
2021/04/05 Python
Javascript webpack动态import
2022/04/19 Javascript