2012-07-16 46 views
0

我正在尝试查找字符串内的数字范围。下面列出了不同的范围。我如何搜索特定范围的号码?使用Python re.search查找数字范围

确保第一号之间[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") 
+1

此代码的预期输出是什么? – Blender 2012-07-16 23:33:05

+0

他希望验证解析,以确保第一个数字在[1,17]之间,[1,37]之间的第二个数字等等。所以他会希望它为此示例报告匹配。至少,这是我的猜测。 – 2012-07-16 23:35:06

+1

正则表达式不太可能成为这项工作的好工具。更好的方法是:使用正则表达式来拆分数字部分,使用int()将其转换为整数,然后使用普通Python代码测试它们的值。 – 2012-07-16 23:35:56

回答

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 

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

0

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

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

最好的办法是设法找到可能的匹配类似你在找什么,然后用一些其他方法来检查它们是否实际上你在找什么。