一篇文章带你了解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爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
python实现PID算法及测试的例子
Aug 08 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
python 5个实用的技巧
Sep 27 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 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的单引号和双引号 字符串效率
2009/05/27 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
javascript动画浅析
2012/08/30 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
党支部季度考核意见
2015/06/02 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书