python中数值范围的正则表达式

时间:2017-10-09 08:48:34

标签: python regex

我需要找到格式" 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等。我只想提取具有" - "在他们之间。我的模式有什么问题。

3 个答案:

答案 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-yx< 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)

使用python软件包regex_engine生成数字范围的正则表达式

您可以使用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)