我想进行“智能”正则表达式替换。例如,考虑:
import re
str = "x(x) and y(y)"
res = re.sub("\(.*?\)","z", str)
结果是:
xz and yz
所以基本上当正则表达式"\(.*?\)"
找到匹配m
时,匹配被替换为"z"
。但是,我想将匹配m
替换为其自身的一些功能:f(m)
:
import re
str = "x(x) and y(y)"
res = re.sub("\(.*?\)",lambda m: m[:-1] + ", z" + m[-1], str)
应该产生:
x(x, z) and y(y, z)
有没有python /优雅的方法来做到这一点?
答案 0 :(得分:4)
您可以捕获匹配并:
res = re.sub("\((.*?)\)", "(\g<1>, z)", str)
\g<1>
包含匹配的组(在这种情况下,它是等式中括号内的内容)。
>>> str = "x(x) and y(y)"
>>> res = re.sub("\((.*?)\)", "(\g<1>, z)", str)
>>> res
'x(x, z) and y(y, z)'
我建议您避免使用在Python中有意义的变量名,例如str
,list
..用户s
例如用于字符串。功能
让我们来看看以下正则表达式:
(\d+)([a-z]+)
正则表达式匹配一个或多个数字,后跟一个或多个字符&#34; a-z&#34;。给定字符串&#34; 1234helloWorld&#34;,第一组(\1
)匹配数字,第二组匹配[a-z]字符。