如何检查re.sub()是否已在python中成功替换?

时间:2015-12-13 17:50:56

标签: python regex

由于re.sub()返回整个修改/未修改的字符串,有没有办法检查re.sub()是否已成功修改了文本,而没有搜索re.sub()的输出?

2 个答案:

答案 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进行比较而不是字符串内容的优点是比较是恒定时间而不是线性。