python - 想要在 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))
回报:二十
解决方案
正则表达式的顺序很重要。
尝试
regex_list["nums_as_words"] = (r'two|twenty-two|twenty')
由于二十在二十二之内,它总是先找到那个。
推荐阅读
- javascript - 如何在窗口调整大小时隐藏标题?
- linux - New-PSDrive:找不到与参数名称“Persist”匹配的参数
- android - Android - 使用 Flow 创建回调
- c# - 手机窗口切换时如何保持时间参考?(统一)
- python - 为什么我无法将日志记录模块与 SMTPHandler 一起使用来发送电子邮件?
- algorithm - 在 cads 中创建 3d 几何图形的 2d 绘图的基本思想是什么
- python - 在类中使用 tk 时,tkinter destroy() 不起作用
- c++ - 是否有类似 `std::tie` 的东西用于将返回的结构中的值传递到现有变量中?
- google-sheets - 用于更新条目的 GSheets 触发器不起作用 - 脚本确实可以手动工作
- r - R闪亮的应用程序:无法标准化`addResourcePath`中的路径