R如何在字符串中删除非常特殊的字符?

7
我正在尝试删除字符串中的一些非常特殊的字符。我已经阅读了其他帖子,比如:
  1. 在R中从字符串中删除所有特殊字符?
  2. 如何从字符串中删除特殊字符?
但这些都不是我要找的内容。
假设我的字符串如下:
s = "who are í ½í¸€ bringing?"

我尝试过以下方法:

test = tm_map(s, function(x) iconv(enc2utf8(x), sub = "byte"))
test = iconv(s, 'UTF-8', 'ASCII')

以上方法均无效。

编辑:我正在寻找一种通用解决方案! 我不能(也不想)手动识别所有特殊字符。

这些非常特殊的字符可能是表情符号造成的(不确定100%)。

请帮助或指导我找到正确的帖子。 谢谢!


1
我认为真正的问题是,你是如何得到这些无意义的字符串的?如果你回退一步,思考一下你生成这个字符串的过程,你可能可以调整那一步来获得你想要的输出。 - Rich Scriven
1
所以,我刚刚尝试了使用gsub这个函数,看起来好像是有效的。就像这样:s2 <- gsub("€", "", s)。你也可以试一下。基本上就是将你字符串变量s中的所有"€"替换为空,从而将其删除。 - giraffehere
@RichardScriven 我不是很确定,但可能是来自表情符号。 - alwaysaskingquestions
@giraffehere 你有没有更一般/不那么手动的方法来做这个? - alwaysaskingquestions
1个回答

6

所以,我会给出一个答案,因为我相信这就是你要找的:

> s = "who are í ½í¸€ bringing?"
> rmSpec <- "í|½|€" # The "|" designates a logical OR in regular expressions.
> s.rem <- gsub(rmSpec, "", s) # gsub replace any matches in remSpec and replace them with "".
> s.rem
[1] "who are  ¸ bringing?"

现在,需要注意的是您必须手动定义rmSpec变量中的特殊字符。不确定您是否知道要删除哪些特殊字符或者您是否正在寻找更一般的解决方案。
编辑:
看起来您几乎使用了iconv,只是缺少了sub参数。请参见下面的内容:
> s
[1] "who are í ½í¸€ bringing?"
> s2 <- iconv(s, "UTF-8", "ASCII", sub = "")
> s2
[1] "who are   bringing?"

我正在寻找一个更通用的解决方案。在我的情况下,手动识别所有特殊字符几乎是不可能的(因为我有一个非常大的数据集,而且我不想逐个查找哪些特殊字符我有)。 - alwaysaskingquestions
@alwaysaskingquestions 请看我的回答中的修改。你漏掉了iconv中的一个额外参数。 - giraffehere
1
你还可以指定一组要替换的字符,例如 gsub("[í½€¸]","",s),这比多次使用 | 更简单。 - thelatemail
@thelatemail 我总是忘记这个。感谢您的补充! - giraffehere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接