Хотите найти «двадцать два», но возвращает «двадцать» в Python regex.finditer - PullRequest
0 голосов
/ 30 апреля 2020

Моя цель - найти все возрастные слова в документе. В качестве примера, в предложении «Ей двадцать два. И она любит тебя. И ты никогда не узнаешь, как это меня смущает», я хотел бы найти двадцать два. Но regex.finditer всегда возвращает двадцать вместо двадцати двух.

enter code here

regex_list = {}

regex_list['before_age'] = (r'age|aged|he\s*is|she\s*is|she\'s|he\'s')

regex_list["nums_as_words"] = (r'two|twenty|twenty-two')

p = r'(?i)(({before_age})\s*[a\s|an\s]?\s*({number_words}))'.format(
    before_age = regex_list['before_age'],
    number_words = regex_list["nums_as_words"]
    )

text = "She's twenty-two. And she's loving you. And you'll never know how it makes me blue"

for match in regex.finditer(p, str(text)):
    if match.group(3):
        print (match.group(3))  

Возвращает: двадцать

1 Ответ

1 голос
/ 30 апреля 2020

Порядок регулярного выражения имеет значение.

Попробуйте

regex_list["nums_as_words"] = (r'two|twenty-two|twenty')

Поскольку двадцать находится внутри двадцать два, он всегда находил это первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...