#python #regex
#python #регулярное выражение
Вопрос:
Очень просто, я пытаюсь заменить строку, содержащую подстроку XX.
import re
def replace_bogus(original, replacement):
bogus = re.compile('[.]*[X][X][.]*')
if bogus.match(original) != None:
original = replacement
return original
if __name__ == "__main__":
teststr = replace_bogus('ABXX0123', '')
print teststr
Этот код выводит ABXX0123.
Почему это регулярное выражение неверно и что я должен использовать вместо этого?
Комментарии:
1.
re
у модуля есть собственныйsub
метод замены.
Ответ №1:
Потому что точка ( .
) не имеет особого значения, когда она находится внутри символьного класса (т.е. [.]
). Регулярное выражение не соответствует тексту и возвращается None
.
Как было сказано в комментариях, re
модуль имеет свой собственный метод замены, то sub
есть метод. Вы можете просто использовать его следующим образом:
import re
p = re.compile(r'XX')
result = re.sub(p, '', 'ABXX0123')
print result // => AB0123
Комментарии:
1. Добавляя к этому, я поставил точки в классах символов, потому что это может быть понятнее, чем обратная косая черта, черт возьми, но делать это для
X
не имеет никакого смысла.
Ответ №2:
Поскольку вы не указали, что хотите использовать регулярное выражение. Как насчет:
teststr = 'ABXX0123'
print teststr.replace('XX', '')