删除所有符号,同时保留字符串一致性

时间:2015-12-02 03:08:54

标签: regex string python-2.7 unicode symbols

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

碳共聚物-III❏£\ n12-Géotechnique\ n

我想删除 copolymer \ n之间的 - £字符。我正在查看here并认为我应该使用正则表达式并删除所有符号,给出正确的unicode字符范围。我在文本文件中的字符范围从拉丁语到俄语和....但是我在下面写的正则表达式代码没有帮助。

>>> s = u'carbon copolymers—III❏£\n12- Géotechnique\n'
>>> re.sub(ur'[^\u0020-\u00FF\n]+',' ', s)

此方法似乎存在两个问题:

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

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

以下是上述代码的结果:

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 

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

这是我们新的,可怕的字符串:

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

这是结果字符串:

u'carbon    copolymers   \u066f III  \n      \u01e2  \u0714    \u0621  G\xe9otechnique  \n'

所有剩余的字符/单词实际上都是不同语言的字母字符。几乎没有努力完成!

以下是解决方案:

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