首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除所有符号,同时保持字符串一致性。

删除所有符号,同时保持字符串一致性。
EN

Stack Overflow用户
提问于 2015-12-02 03:08:54
回答 1查看 96关注 0票数 0

我的目标是从字符串中删除所有符号,并且仍然保留unicode字符(任何语言中的字母字符)。假设我有以下字符串:

碳共聚物-III❏G\n-Géo技术

我想删除共聚物和\n之间的- go 字符。我在看这里,我想也许我应该用regex删除所有的符号,给出正确的unicode字符范围。我在文本文件中的字符范围从拉丁语到俄语和.各不相同。然而,我在下面编写的regex代码没有帮助。

代码语言:javascript
复制
>>> s = u'carbon copolymers—III❏£\n12- Géotechnique\n'
>>> re.sub(ur'[^\u0020-\u00FF\n]+',' ', s)

这种方法似乎有两个问题:

1)不同的unicode范围仍然包含一些符号。

( 2)有时,由于某种未知的原因,返回的结果似乎与预期的完全不同。

下面是上面代码的结果:

代码语言:javascript
复制
carbon copolymers\xe2\x80\x94III\n12- G\xc3\xa9otechnique\n
>>> print u'carbon copolymers\xe2\x80\x94III\n12- G\xc3\xa9otechnique\n'
carbon copolymersâIII
12- Géotechnique 

你知道更好的方法吗?是否有所有符号的完整列表?你有其他的想法而不是regex吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 15:13:27

我认为找到了一个很好的解决方案(我相信>99%的稳健性):

好吧,这是我们新的,可怕的绳子:

代码语言:javascript
复制
s = u'carbon҂ ҉ copolymers—⿴٬ٯ٪III❏£\n12-ः׶ Ǣ ܊ܔ ۩۝۞ء܅۵Géotechnique▣ऀ\n'

下面是产生的字符串:

代码语言:javascript
复制
u'carbon    copolymers   \u066f III  \n      \u01e2  \u0714    \u0621  G\xe9otechnique  \n'

所有剩下的字符/单词实际上都是字母字符,用不同的语言。几乎毫不费力就完成了!

以下是解决办法:

代码语言:javascript
复制
s = ''.join([c if c.isalpha() or c.isspace() else ' ' for c in s])
s = re.sub(ur'[\u0020-\u0040]+|[\u005B-\u0060]+|[\u007B-\u00BF]+', ' ', s)
s = re.sub(r'[ ]+', ' ', s)
carbon copolymers ٯ III  
Ǣ ܔ ء Géotechnique  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34034225

复制
相关文章

相似问题

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