在堆栈溢出中,有很多关于如何只保留字符串中的字母字符的答案,最常见的是著名的regex '[^a-zA-Z]'
。但是这个答案是完全错误的,因为它假设每个人都只写英语.我想我可以否决所有这些答案,但我最终认为再次问这个问题会更有建设性,因为我找不到答案。
有没有容易的(或不.)在python中,只保留所有语言中的字符串中的字母字符?我想也许一个库可以像javascript中的xregexp一样.我所指的所有语言都是英语,但也包括法语、俄语、汉语、greec...etc
发布于 2017-06-27 11:50:33
^\W\d_
使用Python3或Python2中的re.UNICODE
标志,您可以使用[^\W\d_]
。
\W :如果设置了UNICODE,这将匹配Unicode字符属性数据库中分类为非字母数字的0-9+字符以外的任何其他字符。
因此,[^\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_]
。
这个regex实现是向后兼容的标准‘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测试)
https://stackoverflow.com/questions/44779330
复制相似问题