使用正则表达式提取年龄变化

import re
s = '18year old 23 year old 99 years old but not 25-year-old and 91year old cousin is 99 now and 90-year-old or 102 year old'

从中s,我想使用正则表达式提取所有 90 岁或以上的年龄。例如,99 years old将被提取但不是18year old.

我试过以下

    reg = r'(9\d|\d{3,})(-year-old)|(9\d|\d{3,})( year old)'
    r1 = re.findall(reg,s)
    r1

这给了我

[('90', '-year-old', '', ''), ('', '', '102', ' year old')]

理想情况下,我想要这个输出

['99 years old', '91year old', '90-year-old',  '102 year old' ]

如何更改我的正则表达式reg以获得我想要的输出?


天涯尽头无女友
浏览 220回答 1
1回答

皈依舞

这个正则表达式会做你想做的事:(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old正则表达式演示解释:(?:9\d|1\d{2})     # Non-capturing group - match 9x or 1xx(?:\s|-)?          # Non-capturing group - optionally match whitespace or -years?             # Match year and optionally s(?:\s|-)?          # Non-capturing group - optionally match whitespace or -old                # Match old代码片段:reg = r'(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old'r1 = re.findall(reg,s)print(r1)# ['99 years old', '91year old', '90-year-old', '102 year old']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python