Python:如何替换并知道它是否匹配

时间:2010-10-19 14:39:38

标签: python regex

我知道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,但实际上匹配。

3 个答案:

答案 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',))
           ))