2013-02-18 69 views
8

這是用Python編寫的,Python正則表達式re.match,爲什麼這段代碼不起作用?

import re 
s='1 89059809102/30589533 IronMan 30 Santa Ana Massage table/IronMan 30 Santa Ana Massage table' 
pattern='\s(\d{11})/(\d{8})' 
re.match(pattern,s) 

它返回無。

我試着服用支架脫落,

pattern='\s\d{11}/\d{8}' 

它仍然返回none

我的問題是:

  1. 爲什麼re.match沒有發現什麼?
  2. 模式中使用或不使用括號有什麼區別?
+0

@nhahtdh:' \ s'和'\ d'在普通的python字符串中沒有任何意義,所以在這種特殊情況下沒有區別,反斜槓也不需要轉義。 – 2013-02-18 10:11:44

+0

@MartijnPieters:你說得對,但是原始字符串對於清除混淆仍然非常有用。不同的語言對'''''有不同的處理方式,後面跟着一個不構成轉義序列的字符。 – nhahtdh 2013-02-18 10:14:01

+1

@nhahtdh:我完全同意;使用正則表達式的'r''原始字符串當然是一個好主意,並且是最佳實踐。就在這種情況下,OP是幸運的,沒有任何區別。 :-) – 2013-02-18 10:16:01

回答

18

re.match「匹配」自字符串開始,但有一個額外的1

改爲使用re.search,它將在字符串中的任意位置「搜索」。而且,你的情況,也發現一些:

>>> re.search(pattern,s).groups() 
('89059809102', '30589533') 

如果你刪除模式的括號中,它仍然會返回一個有效_sre.SRE_Match,對象,但空groups

>>> re.search('\s\d{11}/\d{8}',s).groups() 
() 
+1

這是一個明確的解釋。我明白你的意思,謝謝! – bing 2013-02-19 00:09:40

相關問題