一篇文章带你了解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中处理异常的教程
May 24 Python
python实现文件快照加密保护的方法
Jun 30 Python
Python中字符串的处理技巧分享
Sep 17 Python
Django的信号机制详解
May 05 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
pandas.cut具体使用总结
Jun 24 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
写好Python代码的几条重要技巧
May 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的FTP学习(二)
2006/10/09 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
js 日期比较相关天数代码
2014/04/02 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
babel基本使用详解
2017/02/17 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
vue实现评论列表功能
2019/10/25 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
Python实现最大子序和的方法示例
2019/07/05 Python
Python 硬币兑换问题
2019/07/29 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
网络书店创业计划书
2014/02/07 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
年终工作总结范文2014
2014/11/27 职场文书
车间统计员岗位职责
2015/04/14 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
MySQL Server 层四个日志
2022/03/31 MySQL
vue实现拖拽交换位置
2022/04/07 Vue.js
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript