如何删除R中字符串末尾的省略号

时间:2017-02-06 10:06:09

标签: r regex ellipsis

我有单词列表,我从下面的代码中得到。

tags_vector <- unlist(tags_used)

此列表中的某些字符串最后有省略号,我想删除它。在这里,我打印此列表的第5个元素及其类

tags_vector[5]
#[1] "#b…"

class(tags_vector[5])
#[1] "character"

我正在尝试使用gsub从第5个元素中删除省略号,使用代码,

gsub("[…]", "", tags_vector[5])
#[1] "#b…"

此代码不起作用,我将“#b ...”作为输出。但是在相同的代码中,当我直接放置第5个元素的值时,它可以正常工作,如下所示,

gsub("[…]", "", "#b…")
#[1] "#b"

我甚至尝试将tags_vector[5]的值放在变量x1中,并尝试在gsub()代码中使用它,但它仍然不起作用。

1 个答案:

答案 0 :(得分:0)

这可能是Unicode问题。在R(工作室)中,并非所有角色都是平等创造的。

我试图创建一个可重现的例子:

# create the ellipsis from the definition (similar to your tags_used)
> ell_def <- rawToChar(as.raw(c('0xE2','0x80','0xA6'))) # from the unicode definition here: http://www.fileformat.info/info/unicode/char/2026/index.htm
> Encoding(ell_def) <- 'UTF-8'
> ell_def
[1] "…"
> Encoding(ell_def)
[1] "UTF-8"

# create the ellipsis from text (similar to your string)
> ell_text <- '…'
> ell_text
[1] "…"
> Encoding(ell_text)
[1] "latin1"

# show that you can get strange results
> gsub(ell_text,'',ell_def)
[1] "…"

此示例的可重现性可能取决于您的区域设置。在我的情况下,我在Windows-1252中工作,因为您无法在Windows中将语言环境设置为UTF-8。根据{{​​3}},&#34; R允许ASCII,UTF-8和您平台的原生编码中的字符串和平共存&#34;。如上例所示,这有时会产生相反的结果。

基本上,您看到的输出看起来相同,但不是字节级别。

如果我在R终端中运行此示例,我会得到类似的结果,但显然,它将省略号显示为点:&#34;。&#34;。

您的示例的快速修复是在您的gsub中使用省略号定义。 E.g:

gsub(ell_def,'',tags_vector[5])