【问题标题】:How to remove unicode <U+00A6> from string?如何从字符串中删除 unicode <U+00A6>?
【发布时间】:2017-02-20 23:12:34
【问题描述】:

我有一个类似的字符串:

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

我想删除&lt;U+00A6&gt; 并只获得1000 66329

我尝试使用:

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

但它并没有删除任何东西。我应该怎么做gsub才能只得到1000 66329

【问题讨论】:

  • 按分隔符(空格?)分割,然后取第二位文本?
  • 作业实际上是什么样的?您是在分配 Unicode 字符 U+00A6 还是文字字符串 '&lt;U+00A6&gt;'?因为这就是你的代码目前正在做的事情,鉴于此,其余的没有多大意义。
  • 实际上我有一个数据框,其中一列的值类似于“ 1000-66329”,而这个 是折线符号 (¦) 的 unicode,位于所有值的开始。我想从我的数据中删除这个意外符号。
  • 也许可以尝试将 ¦ 复制并粘贴到您的 gsub 中。

标签: r regex gsub


【解决方案1】:

我只想删除字符串开头的 unicode &lt;U+00A6&gt;

那么您不需要gsub,您可以使用sub"^\\s*&lt;U\\+\\w+&gt;\\s*" 模式:

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

模式详情

  • ^ - 字符串开头
  • \\s* - 零个或多个空格
  • &lt;U\\+ - 文字字符序列 &lt;U+
  • \\w+ - 1 个或多个字母、数字或下划线
  • &gt; - 文字 &gt;
  • \\s* - 零个或多个空格。

如果您还需要将- 替换为空格,请添加|- 替代项并使用gsub(因为现在我们希望有多个替换项,并且替换项必须是空格 - 在akrun's answer 中也是如此):

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

R online demo

【讨论】:

  • 这是删除 (ASCII) 字符串 &lt;U+00A6&gt;,而不是 Unicode 字符
  • 这对我来说非常有效。非常感谢您的解决方案。
  • @HongOoi:没错,这就是 OP 在输入中的内容。
  • @user6559913:仅供参考,"\u00a6" 模式与 PCRE 正则表达式风格不兼容,要匹配 unicode 代码点,您需要使用 \x{00a6} 表示法。但是,正如您自己提到的,您有一个要删除的文字 &lt;U+...&gt; 子字符串,所以您不需要它。
【解决方案2】:

如果总是第一个字符,可以试试:

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

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

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

两种方式的结果都是:

[1] "  1000-66329"

【讨论】:

  • 感谢您的解决方案。但这给了我“006 1000 66329”,我也有一些包含字母的字符串,比如“ 1000-66B29”。我只想删除字符串开头的 unicode
【解决方案3】:

我们也可以

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

【讨论】:

    【解决方案4】:

    您应该将其转换为适当的格式,而不是删除...您必须将本地设置为 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”是“中文”的意思。您应该知道必须转换为哪种语言。就是这样

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多