一篇文章带你了解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删除列表中重复记录的方法
Apr 28 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
django 常用orm操作详解
Sep 13 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
PyQt5实现下载进度条效果
Apr 19 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
python实现控制台输出颜色
Mar 02 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
初探PHP5
2006/10/09 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
ext 代码生成器
2009/08/07 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
angular.bind使用心得
2015/10/26 Javascript
Sea.JS知识总结
2016/05/05 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
质量承诺书范文
2014/03/27 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
解析MySQL索引的作用
2022/03/03 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL