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