使用Python re.search查找数字范围

时间:2012-07-16 23:31:36

标签: python range

我想在字符串中找到一系列数字。下面列出了不同的范围。如何搜索特定的数字范围?

确保第一个数字介于[1,17]之间,第二个数字介于[1,37]等之间

import re   
Test1 = "This is a test 5-9-81-15"

A1 = range(1, 17)
A2 = range(1, 37)
A3 = range(76, 89)
A4 = range(13, 27)

x = re.search("{0}-{1}-{2}-{3}".format(A1, A2, A3, A4), Test1) 

if x: 
    print ("Match")
else:
    print ("No Match")

2 个答案:

答案 0 :(得分:0)

如果您只能获得一串数字,请按以下方式查看它是否符合您的要求:

>>> s = "5-9-81-15"          # String to parse
>>> lb = [1, 1, 76, 13]      # List of lower bounds
>>> ub = [17, 37, 89, 27]    # List of upper bounds

>>> vals = [int(x) for x in s.split('-')]   # vals contains [5, 9, 81, 15]

>>> all(x > L and x < U for x, L, U in zip(vals, lb, ub))    # does the check
True

失败的例子:

>>> s = "5-9-90-15"    # fails with the third number
>>> vals = [int(x) for x in s.split('-')]
>>> all(x > L and x < U for x, L, U in zip(vals, lb, ub))
False

正则表达式是正确的工具,如果您需要从包含其他文本/字符的较大字符串中提取数字序列。

答案 1 :(得分:0)

正则表达式是关于匹配字符的。它不了解数字,日期或其他任何内容。

虽然有时候可以建立一个正则表达式来匹配一个范围内的数字,但它可能会变得非常冗长和混乱。

最好的解决方案是尝试找到类似您正在寻找的匹配项,然后使用其他方法来检查每个是否你是什么寻找。