我该如何编写一个正则表达式来搜索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()
答案 0 :(得分:3)
您可以使用
r'(\d+(?:-\d+)?\+?)\s*(years?)'
请参见regex demo。使用re.I
标志进行编译以启用不区分大小写的匹配。
详细信息
(\d+(?:-\d+)?\+?)
-第1组:
\d+
-1个以上数字(?:-\d+)?
-一个可选的组,匹配-
,然后匹配1个以上的数字\+?
-可选的+
字符\s*
-超过0个空格(years?)
-第2组:year
或years
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
字边界答案 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')]
正则表达式说明: