Lau*_*ent 9 python string multilingual
在stackoverflow上有很多关于如何只保留字符串中的字母字符的答案,最常见的是着名的正则表达式'[^a-zA-Z]'.但这个答案是完全错误的,因为它假设每个人都只写英文......我想我可以对所有这些答案进行投票,但我终于认为再次提出这个问题会更有建设性,因为我找不到答案.
在python中是否有一种简单(或不......)的方式,只保留适用于所有语言的字符串中的字母字符?我想也许关于一个可以像javascript中的xregexp那样做的库......所有语言我的意思是英语,但也有法语,俄语,中文,希腊语......等等
使用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', 'é', 'ß', 'Ü', '?', '?']
Run Code Online (Sandbox Code Playgroud)
要避免这种错综复杂的逻辑,您还可以先删除数字和下划线,然后查找字母数字字符:
>>> 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', 'é', 'ß', 'Ü', '?', '?']
Run Code Online (Sandbox Code Playgroud)
似乎该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', 'é', 'ß', 'Ü', '?', '?']
Run Code Online (Sandbox Code Playgroud)
(使用Anaconda Python 3.6测试)
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |