看似简单的删除尾随逗号失败

时间:2017-10-14 07:00:35

标签: r regex

我在数字前面有逗号的值,例如‚0.10。我想删除尾随,以获取0.10

之类的数字

我已尝试gsub(",", "", "‚0.10"),但未删除逗号。任何想法在这里发生了什么?

gsub(",", "", "‚0.10")
# [1] "‚0.10"

由于

1 个答案:

答案 0 :(得分:1)

我认为你的替换失败的原因,尽管它只是"应该工作",是x潜伏着控制角色

如果我从OP中复制粘贴 patternx,则会重现该问题:

gsub(pattern = ",", replacement = "", x = "‚0.10")
# [1] "‚0.10"

另一方面,如果我在OP中复制粘贴pattern,但在我的编辑器中输入 x,我会得到所需的结果:

gsub(pattern = ",", replacement = "", x = ",0.10")
# [1] "0.10"

因此,尽管两个调用看起来相同,但它们的结果不同。

然后使用grepl查找控制字符([:cntrl:]):

# copy-paste x from OP
grepl(pattern = "[[:cntrl:]]", x = "‚0.10")
# [1] TRUE

# type in x in editor
> grepl(pattern = "[[:cntrl:]]", x = ",0.10")
# [1] FALSE

事实上,原始版x中有一些内容(而不是x我输入的内容)。

您可以使用stringi::stri_unescape_unicode查看隐藏在那里的内容。再次,从OP:

复制粘贴字符串
library(stringi)
stri_unescape_unicode(str = "‚0.10") 
# [1] "\u00820.10"

虽然原始,中的"‚0.10"看起来像normal ,,但却是Unicode Character 'BREAK PERMITTED HERE' (U+0082)逗号欺骗我们。

因此,如果无法在上游修复,您可以使用:

gsub(pattern = "[[:cntrl:]]", replacement = "", x = "‚0.10")
# "0.10"