首页 > 解决方案 > 想要在 Python regex.finditer 中找到“二十二”但返回“二十”

问题描述

我的目的是找出文档中所有与年龄相关的单词。例如,在“她 22 岁。她爱你。你永远不会知道它是如何让我变得忧郁的”这句话中,我想找到 22 岁。但是 regex.finditer 总是返回 20 而不是 22。

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))  

回报:二十

标签: pythonregex

解决方案


正则表达式的顺序很重要。

尝试

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

由于二十在二十二之内,它总是先找到那个。


推荐阅读