一篇文章带你了解Python和Java的正则表达式对比

 更新时间:2021年09月14日 15:14:16   作者:8su  
正则表达式有元字符及不同组合来构成,通过巧妙的构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务,希望本片文章能给你带来帮助

参考资料:

  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 密码加密与解密的实现

    本文主要介绍了python 密码加密与解密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 分享Pycharm中一些不为人知的技巧

    分享Pycharm中一些不为人知的技巧

    工欲善其事必先利其器,Pycharm 是最受欢迎的Python开发工具,它提供的功能非常强大,是构建大型项目的理想工具之一,如果能挖掘出里面实用技巧,能带来事半功倍的效果
    2018-04-04
  • Python处理CSV与List的转换方法

    Python处理CSV与List的转换方法

    下面小编就为大家分享一篇Python处理CSV与List的转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Windows上配置Emacs来开发Python及用Python扩展Emacs

    Windows上配置Emacs来开发Python及用Python扩展Emacs

    这篇文章主要介绍了Windows上配置Emacs来开发Python及用Python扩展Emacs的方法,Emacs与Vim并称为开发者手中最强大的两款文本编辑器,需要的朋友可以参考下
    2015-11-11
  • python 实现快速生成连续、随机字母列表

    python 实现快速生成连续、随机字母列表

    今天小编就为大家分享一篇python 实现快速生成连续、随机字母列表,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python模块中pip命令的基本使用

    python模块中pip命令的基本使用

    这篇文章主要为大家介绍了python机器学习python实现神经网络的示例解析,在同样在进行python机器学习的同学可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • python二分法查找算法实现方法【递归与非递归】

    python二分法查找算法实现方法【递归与非递归】

    这篇文章主要介绍了python二分法查找算法实现方法,结合实例形式分析了Python使用递归与非递归算法实现二分查找的相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • Python并发编程线程消息通信机制详解

    Python并发编程线程消息通信机制详解

    这篇文章主要为大家介绍了Python并发编程之线程消息通信机制的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 帮你快速上手Jenkins并实现自动化部署

    帮你快速上手Jenkins并实现自动化部署

    在未学习Jenkins之前,只是对Jenkins有一个比较模糊的理解,即Jenkins是一个自动化构建项目发布的工具,可以实现代码->github或者gitlab库->jenkins自动部署->访问的整体的过程,而无需人为重新打包,今天就带大家详细了解一下,帮你快速上手Jenkins,需要的朋友可以参考下
    2021-06-06
  • PyCharm安装Markdown插件的两种方法

    PyCharm安装Markdown插件的两种方法

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。这篇文章主要介绍了PyCharm安装Markdown插件的两种方法,需要的朋友可以参考下
    2019-06-06

最新评论