一篇文章带你了解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格式化字符串实例总结
Sep 28 Python
Java及python正则表达式详解
Dec 27 Python
python生成密码字典的方法
Jul 06 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
Python 硬币兑换问题
Jul 29 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Python argparse模块应用实例解析
Nov 15 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
Python高并发和多线程有什么关系
Nov 14 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php+mysql实现无限级分类
2015/11/11 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
JS 继承实例分析
2008/11/04 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
Python hashlib模块实例使用详解
2019/12/24 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
strstr()的简单实现
2013/09/26 面试题
银行柜员应聘推荐信范文
2013/11/24 职场文书
财务会计人员岗位职责
2013/11/30 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
市三好学生主要事迹
2014/01/28 职场文书
上班上网检讨书
2014/01/29 职场文书
运动会稿件100字
2014/02/21 职场文书
金融事务专业求职信
2014/04/25 职场文书
热门专业求职信
2014/05/24 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫