在Python中使用正则表达式在字符串中寻找多年的经验

时间:2018-12-10 10:21:32

标签: python regex

我该如何编写一个正则表达式来搜索Python中的以下内容:

10+ years
10 years
1 year
10-15 years

到目前为止,我已经使用了它,但是它不能为所有这些对象提供结果。

re_expression = '(\d+).(years|year|Year|Years)'
    exp_temp = re.search(re_expression.decode('utf-8'),description)
    experience_1=''
    if exp_temp:
        experience_1 = exp_temp.groups()

3 个答案:

答案 0 :(得分:3)

您可以使用

r'(\d+(?:-\d+)?\+?)\s*(years?)'

请参见regex demo。使用re.I标志进行编译以启用不区分大小写的匹配。

详细信息

  • (\d+(?:-\d+)?\+?)-第1组:
    • \d+-1个以上数字
    • (?:-\d+)?-一个可选的组,匹配-,然后匹配1个以上的数字
    • \+?-可选的+字符
  • \s*-超过0个空格
  • (years?)-第2组:yearyears

Python demo

import re
rx = re.compile(r"(\d+(?:-\d+)?\+?)\s*(years?)", re.I)
strs = ["10+ years", "10 years", "1 year", "10-15 years"] 
for description in strs:
    exp_temp = rx.search(description)
    if exp_temp:
        print(exp_temp.groups())

输出:

('10+', 'years')
('10', 'years')
('1', 'year')
('10-15', 'years')

答案 1 :(得分:2)

如果要匹配您的值并且不需要捕获组,则可以使用:

\b(?:\d+-\d+ [yY]ears|[02-9] [Yy]ears|1 [Yy]ear|[1-9]\d+\+? [Yy]ears)\b

请参见regex demo

说明

  • \b字边界
  • (?:非捕获组
    • \d+-\d+ [yY]ears匹配格式10-15年
    • |
    • [02-9] [Yy]ears匹配格式0或2-9年
    • |
    • 1 [Yy]ear匹配格式1年
    • |
    • [1-9]\d+\+? [Yy]ears匹配格式超过10年
  • )关闭非捕获组
  • \b字边界

Python demo

答案 2 :(得分:2)

([\d+-]+)\s+(years?)


import re

x ="""
123 10+ years some text
some text 99 10 years ssss
text 1 year and more text
some text 10-15 years some text
"""

result = re.findall(r"([\d+-]+)\s+(years?)", x, re.IGNORECASE)
print(result)

[('10+', 'years'), ('10', 'years'), ('1', 'year'), ('10-15', 'years')]

Python Demo

Regex Demo


正则表达式说明:

enter image description here