Регулярное выражение Python: ошибка атрибута: объект ‘str’ не имеет атрибута ‘Match’

#python #regex

#python #регулярное выражение

Вопрос:

Это первый раз, когда я использую регулярные выражения с python, и я пытаюсь выяснить, почему он считает, что ошибка «AttributeError: объект ‘str’ не имеет атрибута ‘Match'»

Я делаю это в записной книжке Jupyter. Что я здесь делаю не так? Я вижу только один другой бесполезный вопрос с этой же ошибкой отсутствующего атрибута.

 import re
grp =  "Application: Company Name / 184010 - Application Development / 184010 - Contract Express"
rgx = "w  *(?!.*-)"
res = grp.match(rgx)
print(res)
  

Комментарии:

1. Неправильный синтаксис . Либо re.match(rgx, grp) , либо re.compile(rgx).match(grp) .

2. Что вы пытаетесь сопоставить здесь?

3. Все слова после последнего тире @TimBiegeleisen

4. @meowgoesthedog спасибо!

5. @Timbiegeleisenкак ни странно, я не получаю совпадения, результат пока отсутствует в тестере регулярных выражений, который я использовал, он отлично соответствует.

Ответ №1:

Вы хотите использовать re.match, но это начинается с начала строки. Вместо этого вы могли бы использовать findall:

 import re
grp =  "Application: Company Name / 184010 - Application Development / 184010 - Contract Express"
rgx = "w  *(?!.*-)"
res = re.findall(rgx, grp)
print(res)  # ['Contract ', 'Express']
  

Демонстрация Python

Если за ним также не должно быть косой черты, вы могли бы добавить ее в класс символов вместе с дефисом.

Обратите внимание, что для того, чтобы не совпадать с пробелом после слова, вы могли бы опустить пробел, за которым следует звездочка * , из шаблона.

 w (?!.*[-/])
  

Демонстрация регулярных выражений | Демонстрация Python