Регулярное выражение Python: почему это не работает?

Это не дает мне ошибки и ответа.

re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................') 

Почему он ведет себя так? Кроме того, если я уменьшу количество «периодов», то он будет работать.

Спасибо.

2 Solutions collect form web for “Регулярное выражение Python: почему это не работает?”

У вас катастрофический откат .

У вас нет o или 0 во входной строке, но для вашего регулярного выражения требуется хотя бы один из этих символов ( [o0] ).

 >>> re.compile('\\.(\\W|\\.)*[o0](\\W|[o0])*', re.DEBUG) literal 46 max_repeat 0 65535 subpattern 1 branch in category category_not_word or literal 46 in literal 111 literal 48 max_repeat 0 65535 subpattern 2 branch in category category_not_word or in literal 111 literal 48 

Обновление: ваше регулярное выражение страдает от катастрофического отступления ; избегайте комбинации вложенных символов-классов или символов в группе с подстановочным знаком ( branch .. or части внутри max_repeat перечисленные выше). Вы можете поместить классы символов внутри набора символов, чтобы избежать этого.

Также обратите внимание, что вы можете использовать обозначение r'' raw string, чтобы избежать всех сбрасываемых обратных косых черт.

Следующие работы:

 re.sub(r'\.[\W\.]*[o0][\Wo0]*', '*', '..........................................') 

потому что он компилируется:

 >>> re.compile(r'\.[\W\.]*[o0][\Wo0]*', re.DEBUG) literal 46 max_repeat 0 65535 in category category_not_word literal 46 in literal 111 literal 48 max_repeat 0 65535 in category category_not_word literal 111 literal 48 

Обратите внимание, что теперь ветки исчезли.

  • выбор правильной структуры данных для анализа файла
  • Python: извлечение предложения с определенным словом
  • Regex для существования некоторых слов, порядок которых не имеет значения
  • Как найти промежутки с определенным классом, содержащим определенный текст, используя красивый суп и re?
  • Ли ' +' equal '(a | b) +' в модуле python re?
  • Как можно разбить строку в python и получить результат с разделителем?
  • Странное поведение re.sub с utf-8-строками
  • Использование целых чисел / дат в качестве терминалов в парсере NLTK
  • Python - лучший язык программирования в мире.