既然re.sub()
返回整个修改/未修改的字符串,有没有办法检查是否re.sub()
已经成功修改了文本,而没有搜索输出re.sub()
?
你可以使用re.subn
它执行与sub()相同的操作,但返回一个元组(new_string,number_of_subs_made)
如果修改次数0
是,则不修改字符串.
>>> re.subn('(xx)+', '', 'abcdab') ('abcdab', 0) >>> re.subn('(ab)+', '', 'abcdab') ('cd', 2) >>>
如果您具有以下代码:
import re s1 = "aaa" result = re.sub("a", "b", s1)
您可以通过将result的ID与s1进行比较来检查对subsubsubsubstitutions的调用,如下所示:
id(s1) == id(result)
或者,这是相同的:
s1 is result
这是因为python中的字符串是不可变的,因此如果进行任何替换,结果将是与原始字符串不同的字符串(即:原始字符串不变)。使用id进行比较而不是字符串内容的优点是,比较是恒定时间而不是线性时间。