如何从字符串中删除unicode <u + 00a6>?

时间:2016-10-12 08:17:02

标签: r regex gsub

我有一个字符串:

q <-"<U+00A6>  1000-66329"

我想删除<U+00A6>并仅获取1000 66329

我尝试使用:

gsub("\u00a6"," ", q,perl=T)

但它并没有删除任何东西。我应该如何gsub才能获得1000 66329

4 个答案:

答案 0 :(得分:4)

  

我只想删除位于字符串开头的unicode <U+00A6>

然后您不需要gsub,您可以使用sub "^\\s*<U\\+\\w+>\\s*"模式:

q <-"<U+00A6>  1000-66329"
sub("^\\s*<U\\+\\w+>\\s*", "", q)

模式详情

  • ^ - 字符串开头
  • \\s* - 零个或多个空格
  • <U\\+ - 文字字符序列<U+
  • \\w+ - 一个或多个字母,数字或下划线
  • > - 文字>
  • \\s* - 零个或多个空格。

如果您还需要用空格替换-,请添加|-替代方案并使用gsub(因为现在我们预计会有几个替换,并且替换必须是空格 - 同样是在akrun's answer):

trimws(gsub("^\\s*<U\\+\\w+>|-", " ", q))

请参阅R online demo

答案 1 :(得分:2)

如果始终是第一个字符,您可以尝试:

substring("\U00A6 1000-66B29", 2)

如果R将字符串打印为<U+00A6> 1000-66329而不是¦ 1000-66B29,则<U+00A6>将被解释为字符串"<U+00A6>"而不是unicode字符。然后你可以这样做:

substring("<U+00A6>  1000-66329",9)

结果的两种方式都是:

[1] "  1000-66329"

答案 2 :(得分:2)

我们也可以

trimws(gsub("\\S+\\s+|-", " ", q))
#[1] "1000 66329"

答案 3 :(得分:1)

而不是删除你应该将它转换为适当的格式......你必须将你的本地设置为UTF-8,如下所示:

Sys.setlocale("LC_CTYPE", "en_US.UTF-8")

也许您会看到以下消息:

Warning message:
In Sys.setlocale("LC_CTYPE", "en_US.UTF-8") :
  OS reports request to set locale to "en_US.UTF-8" cannot be honored

在这种情况下,您应该使用stringi::stri_trans_general(x, "zh")

这里“zh”的意思是“中国人”。您应该知道必须转换为哪种语言。就是这样