0

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

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

2 回答 2

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

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

于 2012-07-16T23:43:30.877 回答
0

正则表达式是关于匹配字符的。它不理解数字、日期或其他任何东西。

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

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

于 2012-07-16T23:49:13.597 回答