使用正则表达式提取年龄变化 [英] extracting age variations using regex

查看:38
本文介绍了使用正则表达式提取年龄变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 不会被提取.

From s, I would like to extract all ages that are 90 or greater using regex. For instance, 99 years old would be extracted but not 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')]

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

Ideally, I would like this output

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

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

How do I alter my regex reg to get my desired output?

推荐答案

这个正则表达式会做你想做的:

This regex will do what you want:

(?: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']

这篇关于使用正则表达式提取年龄变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆