[^\W\d_]
使用Python3或Python2中的re.UNICODE
标志,您可以使用[^\W\d_]
。
\W:如果设置了UNICODE,则匹配除[0-9_]之外的任何内容,以及在Unicode字符属性数据库中未分类为字母数字的字符。
因此,[^\W\d_]
表示除非不是字母数字字符、不是数字或下划线,否则可以匹配任何字符。换句话说,它匹配任何字母字符。 :)
>>> import re
>>> re.findall("[^\W\d_]", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE)
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д']
先删除数字,再查找"\w"
为避免使用这种复杂的逻辑,您也可以首先删除数字和下划线,然后查找字母数字字符:
>>> without_digit = re.sub("[\d_]", "", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE)
>>> re.findall("\w", without_digit, re.UNICODE)
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д']
正则表达式模块
看起来regex
模块可以帮忙,因为它理解\p{L}
或[\w--\d_]
。
该正则表达式实现与标准的're'模块向后兼容,但提供了额外的功能。
>>> import regex as re
>>> re.findall("\p{L}", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE)
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д']
(使用Anaconda Python 3.6进行测试)