2013-05-16 24 views
0

我有兩個字符串PG((0,0), (0,1), (1,1), (1,0))P(1,1)
我需要編寫代碼來識別那些在正則表達式幫助下的字符串。使用正則表達式搜索時區分類似字符串的問題

到目前爲止,我有這樣的:

if(re.search("^[P\(]",line) is not None): 
    print "P found" 

這標識都是字符串,而應該只認P(1,1)

if(re.search("^[PG\(\(]",line) is not None): 
    print "PG found" 

這還確定了兩個字符串,而應該只認PG((0,0), (0,1), (1,1), (1,0))

什麼我在這裏做錯了嗎?

+1

你爲什麼要使用字符類('[]')?在我看來,如果你刪除了它,它應該可以工作。 – mgilson

回答

3

你的正則表達式正在使用字符類([]內的東西)。這意味着,「匹配任何這些字符」。所以,你首先匹配任何以「P」或「(」開頭的字符串,而第二個匹配任何以「P」,「G」或「(」開頭的字符串。最簡單的方法是刪除字符類 - 如:。

re.search(r"^PG\(\(",line) 

請注意,我用了一個「原始字符串」(通過r前綴字符串)這可以防止蟒蛇從做它的字符轉義平時還要注意,如果您使用更改re.searchre.match,你可以擺脫線錨的開始:

re.match(r"PG\(\(",line) 

re.match只能從開始字符串的開頭。它簡化了正則表達式,在處理正則表達式時,我覺得每種可能的簡化都是值得的。關於這一點,你可以甚至放棄的正則表達式所有聚集在這裏,只需使用str.startswith

if line.startswith('PG(('): 
    ... 
elif line.startswith('P('): 
    ... 
0

刪除方括號,因爲它們標記字符集。用途:

if(re.search(r"^P\(",line) is not None): 

爲什麼以前的版本匹配兩個表達式的原因是,它會測試P\(,並且都包含一個左括號。

相關問題