Подтвердить что ты не робот

Как проверить, была ли re.sub() успешно заменена на python?

Так как re.sub() возвращает всю измененную/немодифицированную строку, есть ли способ проверить, успешно ли re.sub() изменил текст, не просматривая вывод re.sub()?

4b9b3361

Ответ 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 неизменяемы, поэтому, если какие-либо подстановки сделаны, результат будет отличаться от оригинала (т.е. исходная строка не изменяется). Преимущество использования идентификаторов для сравнения, а не содержимого строк заключается в том, что сравнение является постоянным временем, а не линейным.