我的目标是从字符串中删除所有符号,并且仍然保留unicode字符(任何语言中的字母字符)。假设我有以下字符串:
碳共聚物-III❏G\n-Géo技术
我想删除共聚物和\n之间的-,❏和 go 字符。我在看这里,我想也许我应该用regex删除所有的符号,给出正确的unicode字符范围。我在文本文件中的字符范围从拉丁语到俄语和.各不相同。然而,我在下面编写的regex代码没有帮助。
>>> 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 你知道更好的方法吗?是否有所有符号的完整列表?你有其他的想法而不是regex吗?
谢谢
发布于 2015-12-02 15:13:27
我认为找到了一个很好的解决方案(我相信>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 https://stackoverflow.com/questions/34034225
复制相似问题