2011-04-21 226 views
2
([0-9a-zA-Z_\-]+)/?([^.\/]+)[\.php|\.html] 

對於這個表達式,爲什麼字符串'people'和'person'不匹配?正則表達式匹配

+4

你能你在問什麼更清晰? – David 2011-04-21 00:03:16

+2

我想他的意思是「爲什麼字符串'人'匹配和'人'不'」。 – 2011-04-21 00:09:19

+1

...對不起,什麼?請嘗試一個完整的句子,作爲開始。 >。< – 2011-04-21 00:15:29

回答

3

因爲你在最後的方括號應該在括號內。 '人'將其與方括號中的'l'相匹配,但'人'在方括號中沒有字母。

如果你不想強制與.php或.html匹配,你應該用一個問號跟着它。

這裏是一個可能的修訂正則表達式:([0-9a-zA-Z_-]+)/?([^.\/]+)(.php|.html)?

>>> p='([0-9a-zA-Z_\-]+)/?([^.\/]+)(\.php|\.html)?' 
>>> p=re.compile(p) 
>>> p.match('person') 
<_sre.SRE_Match object at 0x9bac0c0> 
>>> p.match('people') 
<_sre.SRE_Match object at 0x9bac2f0> 
>>> p.match('people').group() 
'people' 
>>> p.match('person').group() 
'person' 

使用match.group()函數,或等值的您喜歡的語言,看看什麼是正則表達式的部分實際上是匹配。它可以非常有啓發性。


在意見修訂後的問題:

>>> p=re.compile('([0-9a-zA-Z_\-]+)(|\.html|\.php)$') 
>>> p.match('ddd').group() 
'ddd' 
>>> p.match('ddd.html').group() 
'ddd.html' 
>>> p.match('ddd.jpeg').group() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'group' 
+0

嗨。謝謝。我實際上想要讓'人'和'人'匹配。 – fuminlu 2011-04-21 00:24:02

+0

它們都在正則表達式中進行修改。 – 2011-04-21 00:30:04

+0

好的,讓我們說清楚。 – fuminlu 2011-04-21 00:33:04