删除特殊字符,但不删除重音字母

Poe*_*dit 4 python nlp diacritics

我执行以下操作:

\n\n
re.sub(r'[^ \\nA-Za-z0-9/]+', '', document)\n
Run Code Online (Sandbox Code Playgroud)\n\n

删除除字母数字、空格、换行符或正斜杠之外的所有字符。

\n\n

所以我基本上想删除除换行符和正斜杠之外的所有特殊字符。

\n\n

但是,我不想删除各种语言(例如法语、德语等)中的重音字母。

\n\n

但是如果我运行上面的代码,那么例如这个词

\n\n

Mot\xc3\xb6rhead

\n\n

变成

\n\n

Motrhead

\n\n

我不想这样做。

\n\n

那么如何运行上面的代码而不删除重音字母呢?

\n\n

更新:

\n\n

下面的@MattM提出了一个解决方案,该解决方案适用于英语、法语、德语等语言,但它肯定不适用于波兰语等语言,因为波兰语中所有重音字母仍被删除。

\n

Mat*_*t M 8

我很确定这会满足您的需要

\n
x = re.sub(r\'[^ \\nA-Za-z0-9\xc3\x80-\xc3\x96\xc3\x98-\xc3\xb6\xc3\xb8-\xc3\xbf/]+\', \'\', \'Mot\xc3\xb6rhead\')\n
Run Code Online (Sandbox Code Playgroud)\n

请查看此处有关 javascript 正则表达式的讨论,尽管存在差异,但它还是有一些相关信息

\n
\n

编辑-

\n

为了扩展 Outcast 的新问题 - 是的,您可以包含非拉丁字符。然而,这可能会变得太麻烦。如果您查看Unicode 字符列表,您会发现我包含了带重音的拉丁字符范围。因此,如果您还想包含所有西里尔字符,我们将添加\xd0\x80-\xd3\xbf到正则表达式中。

\n
import re\n\nyourString = \'Cyrillic Char \xd1\xa4\'\nyourString = re.sub(r\'[^ \\nA-Za-z0-9\xc3\x80-\xc3\x96\xc3\x98-\xc3\xb6\xc3\xb8-\xc3\xbf\xd0\x80-\xd3\xbf/]+\', \'\', yourString)\ntext_file = open("Output.txt", "wb")\ntext_file.write(yourString.encode(\'utf8\'))\ntext_file.close()\n
Run Code Online (Sandbox Code Playgroud)\n

但是,使用此方法,您可能必须包含许多范围,具体取决于您想要或不想要哪种语言的哪些字符。

\n