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

使用Python re.search查找数字范围,python,range,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,

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

确保第一个数字介于[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")

如果您可以得到一个数字字符串,那么您可以通过以下方式检查它是否符合您的要求:

>>> 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
要分析的字符串 >>>lb=[1,1,76,13]#下限列表 >>>ub=[17,37,89,27]#上界列表 >>>VAL=[s.split('-')中x的int(x)]#VAL包含[5,9,81,15] >>>所有(x>L和x 一个失败的例子:

>>> 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
>s=“5-9-90-15”#第三个数字失败
>>>VAL=[s.split('-')中x的int(x)]
>>>全部(拉链中x、L、U的x>L和x

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

Regex只涉及匹配字符。它不懂数字、日期或其他任何东西

尽管有时可以构建一个正则表达式来匹配(比如)一个范围内的数字,但它可能会变得非常冗长和混乱


最好的解决方案是尝试找到与您要查找的内容相似的可能匹配项,然后使用其他方法检查每个匹配项是否都是您要查找的内容。

您对该代码的预期输出是什么?他希望进行验证分析,以确保第一个数字介于[1,17]之间,第二个数字介于[1,37]之间,等等,所以他希望它为这个例子报告一个匹配。至少,这是我的猜测。正则表达式不太可能是这项工作的好工具。更好的方法:使用正则表达式拆分数字部分,使用
int()
将它们转换为整数,并使用普通Python代码测试它们的值。正则表达式不适合确定数字是否在某个范围内。解析字符串以查找数字(使用正则表达式或适当拆分),然后根据范围检查每个数字。@Prashant正是我要查找的内容