如何使用Regex去除标点符号而不影响UTF-8或UTF-16编码的文本,如中文



如何从ASCII和UTF-8编码字符串中删除标点符号,而不会弄乱r中的UTF-8原始字符,特别是中文。

text <- "Longchamp Le Pliage 肩背包 (小)"
stri_replace_all_regex(text, '\p{P}', '')

结果:

Longchamp Le Pliage ��背�� 小

但是期望的结果应该是:

Longchamp Le Pliage 肩背包 小

我希望删除所有的CJK符号和标点符号,以及问ASCII标点符号。

@akrun, sessionInfo()如下

locale:
[1] LC_COLLATE=English_Singapore.1252  LC_CTYPE=English_Singapore.1252    LC_MONETARY=English_Singapore.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Singapore.1252    

中文字符(汉字)的显示取决于平台和IDE(有关R处理非ascii字符的详细信息,请参阅此回答)。在我看来,stri_replace_all_regex正在做你想做的事情,但是一些汉字显示错误(即使它们的底层代码点是正确的)。试试这个:

library(stringi)
my_text <- "Longchamp Le Pliage 肩背包 (小)"
plot(0,0)
text(0, 0, my_text, pos=3)

如果您可以让文本显示在绘图上,那么底层的字符串是正确编码的,问题只是它如何在R终端中显示。如果没有,检查Encoding(my_text),并考虑在进一步的文本处理之前使用enc2utf8。如果绘图工作,请尝试:

no_punct <- stri_replace_all_regex(my_text, "\p{P}", "")
text(0, 0, no_punct, pos=1)

查看stri_replace_all_regex的结果是否确实如您所期望的那样。

最新更新