我知道re.sub(pattern, repl,text)
可以在模式匹配时替换,然后返回替换
我的代码是
text = re.sub(pattern, repl, text1)
我必须定义另一个变量来检查它是否已修改
text2 = re.sub(pattern, repl, text1)
matches = text2 != text1
text1 = text2
并且,它有问题,例如text1='abc123def'
,pattern = '(123|456)'
,repl = '123'
,替换后,它是相同的,因此matches
为false,但实际上匹配。
答案 0 :(得分:16)
使用re.subn
执行与sub()相同的操作,但返回一个元组(new_string,number_of_subs_made)。
然后检查所做的替换次数。例如:
text2, numReplacements = re.subn(pattern, repl, text1)
if numReplacements:
# did match
else:
# did not match
答案 1 :(得分:1)
repl
参数也可以是一个获取RE匹配对象并返回替换对象的函数;如果文本不匹配,则不调用此函数。您可以使用它来执行您需要的操作,然后返回要替换它的常量字符串。这将减少对RE的不必要的第二次检查。
答案 2 :(得分:0)
“字符串是否包含数字”:
for text1 in ('abc123def', 'adsafasdfafdsafqw', 'fsadfoi81we'):
print("Text %s %s numbers." %
((text1, ) + (
('does not contain',) if not any(c.isdigit() for c in text1)
else ('contains',))
))