一篇文章带你了解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中List.index()方法的使用教程
May 20 Python
Python判断Abundant Number的方法
Jun 15 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Python unittest模块用法实例分析
May 25 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
python selenium循环登陆网站的实现
Nov 04 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
Python基础之字符串格式化详解
Apr 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
77A一级收信机修理记
2021/03/02 无线电
类的另类用法--数据的封装
2006/10/09 PHP
php反弹shell实现代码
2009/04/22 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
DWZ刷新dialog解决方法
2013/03/03 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
python中的json总结
2018/10/11 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
如何在python中判断变量的类型
2020/07/29 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
校园学雷锋活动月总结
2014/03/09 职场文书
《故都的秋》教学反思
2014/04/15 职场文书