我有值的列表,每個包含「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}]就可以了,但我希望這是行不通的。
我有值的列表,每個包含「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}]就可以了,但我希望這是行不通的。
使用式斷言(?!...)
:
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
謝謝!所以這是所有任務的唯一途徑,比如發現一些包含'不要流氓'和'不要流氓'的東西? – Francheska 2012-04-25 15:52:37
是的。但請注意,爲「負面模式」編寫正則表達式通常很困難。另見:http://stackoverflow.com/questions/1611853/regular-expression-problem-in-java/1611938#1611938 – 2012-04-25 16:07:53
這可能不起作用,因爲你沒有考慮下劃線字符。 – 2012-04-25 15:39:14