我执行以下操作:
re.sub(r'[^ \nA-Za-z0-9/]+', '', document)
删除所有不是字母数字,空格,换行符或正斜杠的字符。
所以我基本上想删除除换行符和正斜杠之外的所有特殊字符。
但是,我不想删除法语,德语等各种语言的重音字母。
但是如果我运行上面的代码,那么例如
Motörhead
成为
Motrhead
我不想这样做。
那么我如何运行上面的代码但又不删除带重音的字母?
更新:
@MattM在下面提出了一种解决方案,该解决方案确实适用于英语,法语,德语等语言,但对于波兰语等仍删除所有重音字母的语言肯定不起作用。
答案 0 :(得分:2)
我很确定这可以满足您的需求
x = re.sub(r'[^ \nA-Za-z0-9À-ÖØ-öø-ÿ/]+', '', 'Motörhead')
也check here讨论有关javascript regex的问题,尽管有differences
,它仍具有一些相关信息编辑-
要扩展Poete Maudit的新关注-是的,您可以包含非拉丁字符。但是,它可能变得太麻烦了。如果您查看的是list of Unicode chars,则其中包括各种带重音符号的拉丁字符。因此,如果您还想包括所有西里尔字母,我们将Ѐ-ӿ
添加到正则表达式中。
import re
yourString = 'Cyrillic Char Ѥ'
yourString = re.sub(r'[^ \nA-Za-z0-9À-ÖØ-öø-ÿЀ-ӿ/]+', '', yourString)
text_file = open("Output.txt", "wb")
text_file.write(yourString.encode('utf8'))
text_file.close()
但是,使用此方法时,您可能必须包括多个范围,具体取决于您想要或不想要哪种字符。
答案 1 :(得分:0)
您也许还可以修改字符编码。我不知道您是否使用utf-8。我以某种方式在utf8中安装了python文件(我使用Windows和YMMV,但)
#coding: iso-8859-1
import re
x = "Mötörhead MÖTÖRHEAD"
y = re.sub(r'[^\xe0-\xff]', '', x)
print(y, "only keeps accented lower-case characters from", x)
z = re.sub(r'[^\xc0-\xff]', '', x)
print(z, "keeps all accented characters from", x)
第一个注释行很重要。没有它,python会为我抛出编码错误。
如果要调整您特别想要的字符的十六进制值,则可以使用Windows Charmap(Windows西方字符集)。 xc0是大写字母重音字符的开头。但是,如果您只想敲击特定的字符或元音,则Matt M的代码更具可读性。我的挖角,因为它还消除了分隔符号(0xf7)和乘法(0xd7)。