一篇文章带你了解Python和Java的正则表达式对比
作者:8su 发布时间:2021-08-17 20:24:35
标签:Python,Java,正则表达式
参考资料:
正则表达式语法–菜鸟教程
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


猜你喜欢
- 以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式.我们能从Python官方文档里读到应该
- 本文实例讲述了Python使用ConfigParser模块操作配置文件的方法。分享给大家供大家参考,具体如下:一、简介用于生成和修改常见配置
- Anaconda 是一个基于 Python 的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,装上Anaconda,就相当于把
- 背景golang版本:1.16之前遇到的问题,docker启动时禁用了oom-kill(kill后服务受损太大),导致golang内存使用接
- CURLOPT_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);如
- <div class=”A” style=”position:relative;”>A 
- “用户体验”作为舶来品在国内风靡已经有几个年头了,而且从目前情况来看仍旧会继续风靡一段时间。当某产品发布会上,发言人张口闭口就
- curses 库 ( ncurses ) 提供了控制字符屏幕的独立于终端的方法。curses 是大多数类似于 UNIX 的系统(包括 Lin
- 前言大家应该都有所体会,随着硬件层面的发展,linux系统多核已经是普通趋势,而mysql是单进程多线程,所以先天上对多进程的利用不是很高,
- 前言本文主要跟大家分享了关于Ubuntu 18.04配置mysql及配置远程连接的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看
- 1.前言:将测试数据全部敲入数据库非常繁琐,而且如果与合作伙伴一起开发,部署,那么他们肯定也不想把时间花在一个一个录入数据的繁琐过程中,这时
- 本文实例为大家分享了python3.6使用SMTP协议发送邮件的具体代码,供大家参考,具体内容如下代码如下:# !/usr/bin/pyth
- 前言urllib、urllib2、urllib3、httplib、httplib2 都是和 HTTP 相关的 Python 模块,看名字就觉
- python连接clickhouse数据库在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。顾名思义,psutil
- 前言笔者最近正在学习Pandas数据分析,将自己的学习笔记做成一套系列文章。本节主要记录Pandas中数据的合并(concat和append
- iterrows(),iteritems(),itertuples()区别Python函数之iterrows, iteritems, ite
- 请求的ajax路径传递的参数(data)会到action中被一个同样名字的变量(附带set get方法)接收,返回的data是一个JQuer
- 内置数据类型在编程中,数据类型是一个重要的概念。变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。在这些类别中,Python 默认
- 这篇文章主要介绍了基于Python实现扑克牌面试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 公司需要处理一些报表,需要使用百分率,保留2位小数,只用round和trunc函数都可以实现(round(_data,2) ),只是格式不是