Python正则表达式选择“不包含”单词
问题描述:
我试图找到不包含任何“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']"
答
您需要使用Word边界的正则表达式与re.UNICODE
标志:
r = re.compile(ur'\b[^\Wa]+\b', re.UNICODE)
的\W
和\b
将成为支持Unicode即可。
[^\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)
答
[^a]
是单非a
字符。 [^a]\w*
是一个单一的非a
字符,后跟任意数量的单词字符。需要注意的是一个空间是非a
字和字的字符也可以包括a
...
最简单,最直观的方式在Python做,这是不使用re.findall
都:
[word for word in string2.split() if not 'a' in word]
结果为“re.compile('\\ b [^ \\ Wa] + \\ b')” – abidinberkay