2016-05-31 1290 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