2012-04-25 66 views
2

我有值的列表,每個包含「pt」+ 2位數字部分。但是,如果之後有「_digitdigit」 - 這個值應該被刪除。如何匹配連續不包含兩個數字的所有單詞?

應符合:data_pt01_pr, data_pt02_1_pr, data_pt02_2

不應該匹配:data_pt01_01_pr, data_pt22_22, data_pt01_00_ABCD_1_bk_vi

我想類似[^ \ d {2}]就可以了,但我希望這是行不通的。

+0

這可能不起作用,因爲你沒有考慮下劃線字符。 – 2012-04-25 15:39:14

回答

4

使用式斷言(?!...)

pattern = r'pt\d\d(?!_\d\d)' 

這種模式匹配pt後跟兩位數字只有沒有遵循一個下劃線和兩位數字。

>>> p = re.compile(pattern) 
>>> bool(p.search("data_pt01_pr")) 
True 
>>> bool(p.search("data_pt02_2")) 
True 
>>> bool(p.search("data_pt01_01_pr")) 
False 
>>> bool(p.search("data_pt22_22")) 
False 
+0

謝謝!所以這是所有任務的唯一途徑,比如發現一些包含'不要流氓'和'不要流氓'的東西? – Francheska 2012-04-25 15:52:37

+0

是的。但請注意,爲「負面模式」編寫正則表達式通常很困難。另見:http://stackoverflow.com/questions/1611853/regular-expression-problem-in-java/1611938#1611938 – 2012-04-25 16:07:53

相關問題