如何从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
的结果是否确实如您所期望的那样。