我需要在UNICODE中找到所有两个字符的sumbol,除了下划线。目前的解决方案是:
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 _ AND _r 。问题是,我的角色可以是任何语言。所以我不能像这样使用正则表达式:[^ a-zA-Z]。例如,俄语:
print pattern.findall(u'ф_')
答案 0 :(得分:9)
您最好的选择是使用新的regex
module。其中一个功能是它可以从字符集中删除字符:
import regex as re
pattern = re.compile(ur'(?:\s*)([\w--_]{2})(?:\s*)', re.UNICODE | re.MULTILINE | re.DOTALL)
[\w--_]
语法创建一个与\w
相同的字符集,并从匹配字符中删除下划线字符。
答案 1 :(得分:9)
排除任何非单词字符和_
[^\W_]
而不是
\w
答案 2 :(得分:0)
这似乎对我有用:
a="Exclude_from_search"
re.search("(\w[^_]+)", a).group(0)
'Exclude'