Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中检查re.sub()是否已成功替换?_Python_Regex - Fatal编程技术网

如何在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,这提供了有关修改的信息。