Простое регулярное выражение Python не соответствует

#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', '')