2016-05-31 875 views
2

我試圖找到不包含任何「a」字符的單詞。我寫了下面的代碼,但它不起作用。我怎麼能說正則表達式「不包含」?我不能使用「^」號作爲「不」嗎?Python正則表達式選擇「不包含」單詞

import re 
string2 = "asfdba12312sssdr1 12şljş1 kf" 
t = re.findall(r'([^a]\w*) | \w*[^a] ', string2) 
print(t) 

代碼的結果是"['sfdba12312sssdr1', '12şljş1']"

回答

2

您需要使用Word邊界的正則表達式與re.UNICODE標誌:

r = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 

\W\b將成爲支持Unicode即可。

regex demo

[^\Wa]任何Unicode字母,數字或inderscore,但不a匹配。添加re.I標誌以使其不區分大小寫。

如果您不想將數字與數字進行匹配,請將\d添加到char類:[^\W\da]

參見Python demo

# -*- coding: utf-8 -*- 
import re 
p = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 
s = u"asfdba12312sssdr1 12şljş1 kf" 
res = [x.encode('utf8') for x in p.findall(s)] 
print(res) 
+0

結果爲「re.compile('\\ b [^ \\ Wa] + \\ b')」 – abidinberkay

1

[^a]是單非a字符。 [^a]\w*是一個單一的非a字符,後跟任意數量的單詞字符。需要注意的是一個空間是非a字和字的字符也可以包括a ...

最簡單,最直觀的方式在Python做,這是不使用re.findall都:

[word for word in string2.split() if not 'a' in word] 
+0

此代碼將word1,'或'word2?!'視爲單詞(即包含標點符號和符號)。 –

+0

@WiktorStribiżew:好點。我想,向OP展示不使用廢話的好處。 – Amadan

+0

'rx = re.compile(r'\ b \ w + \ b',re.UNICODE)'你可以爲 'words = [rx.findall中的單詞(字符串2),如果不是字中的'a' ]'。 – Jan

相關問題