如何在python中检查re.sub()是否已成功替换?
由于如何在python中检查re.sub()是否已成功替换?,python,regex,Python,Regex,由于re.sub()返回整个已修改/未修改的字符串,如果您有以下代码,是否有任何方法可以检查re.sub()是否已成功修改文本,而无需搜索re.sub()的输出?: import re s1 = "aaa" result = re.sub("a", "b", s1) 您可以通过将结果的id与s1进行比较来检查对sub的调用是否进行了替换,如下所示: id(s1) == id(result) 或者,这是相同的: s1 is result 这是因为python中的字符串是不可变的,因此如果进行
re.sub()
返回整个已修改/未修改的字符串,如果您有以下代码,是否有任何方法可以检查re.sub()
是否已成功修改文本,而无需搜索re.sub()
的输出?:
import re
s1 = "aaa"
result = re.sub("a", "b", s1)
您可以通过将结果的id与s1进行比较来检查对sub的调用是否进行了替换,如下所示:
id(s1) == id(result)
或者,这是相同的:
s1 is result
这是因为python中的字符串是不可变的,因此如果进行任何替换,结果将是与原始字符串不同的字符串(即:原始字符串未更改)。使用ID而不是字符串内容进行比较的优点是,比较是常数时间而不是线性的。您可以使用它执行与sub()相同的操作,但返回一个元组(新字符串,子字符串的数量)如果修改次数为
0
,即未修改字符串
>>> re.subn('(xx)+', '', 'abcdab')
('abcdab', 0)
>>> re.subn('(ab)+', '', 'abcdab')
('cd', 2)
>>>
为什么不能正确地更换呢。如果你想知道里面是否有匹配项,你可以在前面用
re.match()
检查正则表达式的字符串。我假设这个问题的意思是:“你怎么知道re.sub()是否进行了替换?”你实际上想做什么?@Padraic:在一个文件中验证re.sub()之后,想打印类似“替换成功”的消息“if”条件。无法理解下行投票。我确认了这一点。这甚至是有文档记录的:“如果找不到模式,字符串将返回不变”。好吧,它没有明确表示“同一个对象”,因此它可能会在某个时候中断,但如果OP死心塌地地避免比较,这是我们能提供的最好的方法。re.sub(s1,“a”,“b”)
在您的回答中毫无意义。谢谢,我更改了答案以反映这一点。我不知道另一个答案中的subn
(因为我从来都不需要它),这一个肯定是“一种明显的方式”。这一个仍然值得获得“二等奖”。谢谢Praveen,这提供了有关修改的信息。