新闻动态

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

发布日期:2022-01-03 22:36 | 文章来源:站长之家

参考资料:

  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)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注本站的更多内容!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部