Так как re.sub()
возвращает всю измененную/немодифицированную строку, есть ли способ проверить, успешно ли re.sub()
изменил текст, не просматривая вывод re.sub()
?
Как проверить, была ли re.sub() успешно заменена на python?
Ответ 1
Вы можете использовать re.subn
, которые выполняют ту же операцию, что и sub(), но возвращают кортеж (new_string, number_of_subs_made)
Если число модификаций 0
, то строка не изменяется.
>>> re.subn('(xx)+', '', 'abcdab')
('abcdab', 0)
>>> re.subn('(ab)+', '', 'abcdab')
('cd', 2)
>>>
Ответ 2
Если у вас есть следующий код:
import re
s1 = "aaa"
result = re.sub("a", "b", s1)
Вы можете проверить, вызван ли вызов субделами, сделанными подстановками, путем сравнения идентификатора результата с s1 следующим образом:
id(s1) == id(result)
или, что то же самое:
s1 is result
Это связано с тем, что строки в python неизменяемы, поэтому, если какие-либо подстановки сделаны, результат будет отличаться от оригинала (т.е. исходная строка не изменяется). Преимущество использования идентификаторов для сравнения, а не содержимого строк заключается в том, что сравнение является постоянным временем, а не линейным.