2013-07-31 26 views
1

比方說,我有合法的字符的正則表達式發現在正則表達式模式不是所有的字符

legals = re.compile("[abc]") 

我可以在一個字符串返回的合法字符列表如下:

finder = re.finditer(legals, "abcdefg") 
[match.group() for match in finder] 
>>>['a', 'b', 'c'] 

我怎樣才能使用正則表達式來查找不在正則表達式中的字符列表? IE瀏覽器在我的情況下,它會返回

['d','e','f','g'] 

編輯:爲了澄清,我希望能找到一個方法來做到這一點,而無需修改正則表達式本身。

+0

幾乎可以肯定的低效解決方案,但你可以生成法律字符列表,並從所有字符列表中減去該列表 – StephenTG

回答

6

否定字符類:

>>> illegals = re.compile("[^abc]") 
>>> finder = re.finditer(illegals, "abcdefg") 
>>> [match.group() for match in finder] 
['d', 'e', 'f', 'g'] 

如果你不能做到這一點(和你只處理一個字符長度匹配),你可以

>>> legals = re.compile("[abc]") 
>>> remains = legals.sub("", "abcdefg") 
>>> [char for char in remains] 
['d', 'e', 'f', 'g'] 
+0

+1您的速度更快;) – Tadeck

+2

如果他不知道正則表達式,即他只有'legals'變量會怎麼樣? – freakish

+0

我認爲這個問題是否可以在不改變正則表達式本身的情況下進行。 – arshajii

相關問題