2013-10-27 34 views
0

我正在處理this page並繼續使用代碼來覆蓋10位。我的「模式」是:使用「re」模塊的Python中的羅馬數字

>>> pattern = '^M?M?M?(CM?|CD?|D?C?C?C?)(XC?|XL?|L?X?X?X?)$' 

如果我排除在「模式」前面的符號(^),然後像「帽子」字符串將找到一個匹配:

>>> pattern = 'M?M?M?(CM?|CD?|D?C?C?C?)(XC?|XL?|L?X?X?X?)$'  
>>> print re.search(pattern,'hat') 
<_sre.SRE_Match object at 0x1004ba360> 

但是當我把克拉留在前面,然後工作正常,'帽子'找不到匹配。克拉是怎麼做的,爲什麼'帽子'找到一個匹配?

+1

請參見[正則表達式HOWTO - 更多元字符](http://docs.python.org/2/howto/regex#more-metacharacters)。 – falsetru

回答

4

如果實際打印就是它的匹配,即:

print re.search(pattern,"hat").group() 

你會看到什麼,這是因爲它匹配空字符串:""。在你的正則表達式中,每個表達式以?結尾,表示0或1之前的任何內容。沒有前面的^,你的正則表達式將匹配任何東西。它基本上歸結爲:pattern = '$',這再次匹配所有內容。

^表示「以......開頭」。當你把^"hat"不匹配,因爲它不符合你的任何要求,並不是從""開始;但是,如果您將""代替"hat",您將獲得一場比賽。