我的目标是从字符串中删除所有符号,并保留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
你知道更好的方法吗?是否有所有符号的完整列表?你有其他想法而不是正则表达式吗?
谢谢
答案 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