2011-09-04 32 views
-3

如果在Python中使用字典密鑰作爲模式,如何防止在使用re.search時進行數字匹配?對於這個問題,我想避免迭代字典值中的嵌套列表。我試着將正則表達式附加到搜索模式,但它會導致錯誤。在Python中,如果使用字典密鑰作爲模式,如何防止部分匹配使用re.search

部分匹配:

>>> d 
{'server': '192.168.1.1, 192.168.1.22, 192.168.1.2'} 

>>> e 
'192.168.1' 

>>> match = re.search(e, d['server']) 

>>> if match: 
... print match.group() 
... 
192.168.1 
+1

'd [「服務器」]'是指一種表達,「假設'D'是一本字典,看注意與關鍵字'server'有關的值,字典值是你的目標字符串無關緊要,任何字符串都可以用正則表達式掃描(這不是你的模式,'192.168.1'是你的模式並且它沒有正確地轉義。)(這個模式是否有意義是一個不同的問題)問題不清楚,你希望看到什麼輸出? –

+0

,你可以在例子中看到一個部分匹配發生在子字符串上,爲變量'e'添加正則表達式會產生錯誤。您是否知道一種將變量與正則表達式結合以防止部分匹配的方法? – Rob

+0

-1這個問題沒有意義。使用字典絕不會改變其字符串值與正則表達式匹配的方式。哪裏有你有一個「嵌套列表」?你有一個字符串作爲你的價值。澄清你的問題。 – NullUserException

回答

2

如果你只是想匹配一個IPv4地址,您可以使用正則表達式192\.168\.1\.\d+

>>> import re 
>>> text = '192.168.1.2, 192.168.11.9, 192.168.1.255, 10.14.1.1' 
>>> regex = '192\.168\.1\.\d+' 
>>> re.search(regex, text).group() 
'192.168.1.2' 
>>> re.findall(regex, text) 
['192.168.1.2', '192.168.1.255'] 
+0

爲了Python的緣故,您需要使用雙反斜槓('192 \\。168 \\。1 \\。\ d +')或原始字符串(r'192 \ .168 \ .1 \。\ d +')。 http://docs.python.org/library/re.html – andronikus

+0

啊,真的,我忘記了。 但是,它似乎工作? 'repr('\。')=>'\\。' – flowblok

+0

對字典使用變量的方法相同。 – Rob

0

在常規表達模式,.沒有\(當然,一個用於Python的\\)在它的前面是一個特殊的字符相匹配的任何一個字符。你在尋找以你的模式開始的IP地址嗎?用於192\\.168\\.1\\.\d+或某些變體。另外,如果你能得到每個這些IP地址到本身是一個字符串,那麼你可以使用:

if ip.startswith(e): 
    # etc. 
+0

請參閱示例。 – Rob

相關問題