Python正则表达式排除下划线

5

我需要找到UNICODE中除下划线以外的所有两个字符的符号。当前解决方案如下:

pattern = re.compile(ur'(?:\s*)(\w{2})(?:\s*)', re.UNICODE | re.MULTILINE | re.DOTALL)
print pattern.findall('a b c ab cd vs sd a a_ _r')
['ab', 'cd', 'vs', 'sd', 'a_', '_r']

我需要从正则表达式中排除下划线_,这样就不会找到a__r。问题是,我的字符可以使用任何语言。因此,我不能像这样使用正则表达式:[^a-zA-Z]。例如,在俄语中:

print pattern.findall(u'ф_')
3个回答

12

排除任何不是单词字符和_的内容。

[^\W_]

代替

\w

9

您最好使用新的regex模块。它的一个特点是可以从字符集中删除字符:

import regex as re

pattern = re.compile(ur'(?:\s*)([\w--_]{2})(?:\s*)', re.UNICODE | re.MULTILINE | re.DOTALL)
[\w--_] 语法创建了一个字符集,与 \w 相同,但匹配字符中去除了下划线。

0

这个对我来说似乎有效:

a="Exclude_from_search"
re.search("(\w[^_]+)", a).group(0)
'Exclude'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接