2016-09-28 21 views
0

我試圖創建正則表達式匹配以下模式:使用正則表達式匹配5民,圓點,1個NUM,點,5民

00000.1.17372 

即:5 Numbers DOT 1 Number DOT 5 Numbers

我曾嘗試以下re.match:

find = re.match('d{5}.d{1}.d{5}', string) 

在上下文:

import re 

string = "{u'blabla': u'asdf', u'dd': u'a', u'cotry': u'jjK', u'l': u'/q/iii:00000.1.17372', u'stfe': u'', u'fdfhdiufhi': u'GB', u'y_name': u'Unitm', u'mw': u'00000.1.17372'}" 

find = re.match('d{5}.d{1}.d{5}', string) 

print find 

然而,這似乎並沒有工作,因爲輸出是:

None 
+1

're.match(R '^ \ d {5} \。\ d \。\ d {5} $',字符串)' – anubhava

+0

使用'代替search'。 'match'只能在字符串的開始處起作用。 – FamousJameous

+0

這匹配'ddddd#d#ddddd' – brianpck

回答

2

使用與re.findall如下:

r'\b\d{5}\.\d\.\d{5}\b' 

regex demo

的一點是:

  • 要匹配一個數字,您需要使用\d
  • 點必須逃到匹配一個點
  • 匹配整個單詞,你需要使用\b字邊界,否則你會發現5位塊火柴2234567654像串
  • re.findall將返回所有非重疊匹配列表(因爲在此圖案中沒有捕獲組)

樣品Python代碼:

import re 
regex = r"\b\d{5}\.\d\.\d{5}\b" 
test_str = "{u'blabla': u'asdf', u'dd': u'a', u'cotry': u'jjK', u'l': u'/q/iii:00000.1.17372', u'stfe': u'', u'fdfhdiufhi': u'GB', u'y_name': u'Unitm', u'mw': u'00000.1.17372'}" 
matches = re.findall(regex, test_str) 
print(matches) 
+0

什麼意思是「匹配整個單詞」,當沒有單詞包括在內? :) 我爲我的誤會道歉。 – ThatOnePythonNoob

+0

整詞匹配表示在值之前或之後沒有「單詞」字符。 「字」字符包括字母,數字和下劃線(〜'[a-zA-Z0-9_]' - 取決於're.UNICODE'標誌)。 –

+0

另請參閱[Python演示在線](http://ideone.com/aDFFhE)。 –

0

你想要的模式是:

\d{5}\.\d\.\d{5} 

你需要躲避點,並使用正確的令牌的數量,這是\d

相關問題