我需要找到格式" number-number"的数字范围。数字应在0-3000范围内。所以我提出了这个正则表达式
match = re.search(r'^[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]-[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]',sentence)
当我运行该程序时,我想在句子中仅提取56-900,但该程序提取了其他数字,如2016,CLP2012等。我只想提取具有" - "在他们之间。我的模式有什么问题。
答案 0 :(得分:1)
如果要匹配整数范围,则需要使用r“\ b”(字符串的开头/结尾)来保护匹配:
>>> import re
>>> text = "2016, CLP2012 56-900 3000-3000 4000-4000 123-123 0-0"
>>> re.findall(r"\b\d+-\d+\b", text)
['56-900', '3000-3000', '4000-4000', '123-123', '0-0']
如果您只想匹配0到3000之间的整数,则需要更精确的RegEx,如下所示:
>>> r = r"(?:3000|[1-2]\d{3}|[1-9]\d{2}|[1-9]\d|\d)"
>>> re.findall(r"\b" + r + "-" + r + r"\b", text)
['56-900', '3000-3000', '123-123', '0-0']
答案 1 :(得分:0)
此代码仅提取真实范围x-y
和x< y <= 3000
sentence = 'test 69 example 55-66 example 77-44 example 999-3001 example'
for word in re.findall('\d+-\d+', sentence):
l = word.split('-')
if int(l[0])< int(l[1]) <= 3000:
word
此示例的输出:
'55-66'
答案 2 :(得分:0)
您可以使用pip安装此软件包
pip安装正则表达式引擎
from regex_engine import generator
generate = generator()
regex = generate.numerical_range(0,3000)
print(regex)
^([0-9] | [2-8] [0-9] | 1 [0-9] | 9 [0-9] | [2-8] [0-9] [0-9 ] | 1 [1-9] [0-9] | 10 [0-9] | 9 [0-8] [0-9] | 99 [0-9] | [2-2] [0-9] [0-9] [0-9] | 1 [1-9] [0-9] [0-9] | 10 [1-9] [0-9] | 100 [0-9] | 300 [0 -0])$
您还可以为浮点数和负范围生成正则表达式
from regex_engine import generator
generate = generator()
regex1 = generate.numerical_range(5,89)
regex2 = generate.numerical_range(81.78,250.23)
regex3 = generate.numerical_range(-65,12)