网络编程
位置:首页>> 网络编程>> Python编程>> 一篇文章带你了解Python和Java的正则表达式对比

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

作者:8su  发布时间:2021-08-17 20:24:35 

标签:Python,Java,正则表达式

参考资料:

  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)

来源:https://blog.csdn.net/qq_33291559/article/details/120278010

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com