首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只保留字符串中的字母字符(多语种)

只保留字符串中的字母字符(多语种)
EN

Stack Overflow用户
提问于 2017-06-27 11:37:43
回答 1查看 2.7K关注 0票数 12

在堆栈溢出中,有很多关于如何只保留字符串中的字母字符的答案,最常见的是著名的regex '[^a-zA-Z]'。但是这个答案是完全错误的,因为它假设每个人都只写英语.我想我可以否决所有这些答案,但我最终认为再次问这个问题会更有建设性,因为我找不到答案。

有没有容易的(或不.)在python中,只保留所有语言中的字符串中的字母字符?我想也许一个库可以像javascript中的xregexp一样.我所指的所有语言都是英语,但也包括法语、俄语、汉语、greec...etc

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 11:50:33

^\W\d_

使用Python3或Python2中的re.UNICODE标志,您可以使用[^\W\d_]

\W :如果设置了UNICODE,这将匹配Unicode字符属性数据库中分类为非字母数字的0-9+字符以外的任何其他字符。

因此,[^\W\d_]不是字母数字,也不是数字,也不是下划线。换句话说,它是任何字母字符。:)

代码语言:javascript
运行
复制
>>> import re
>>> re.findall("[^\W\d_]", "jüste Ä tösté 1234 ßÜ א д", re.UNICODE)
['j', 'ü', 's', 't', 'e', 'Ä', 't', 'ö', 's', 't', 'é', 'ß', 'Ü', 'א', 'д']

先删除数字,然后查找"\w“

为了避免这种复杂的逻辑,您还可以先删除数字和下划线,然后查找字母数字字符:

代码语言:javascript
运行
复制
>>> 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’模块,但提供额外的功能。

代码语言:javascript
运行
复制
>>> 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测试)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44779330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档