2012-07-16 97 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

正則表達式都是關於匹配字符。它不理解數字,日期或其他任何內容。

雖然有時可能構建一個正則表達式來匹配範圍內的數字,但它可能會變得非常冗長和混亂。

最好的辦法是設法找到可能的匹配類似你在找什麼,然後用一些其他方法來檢查它們是否實際上你在找什麼。