【问题标题】:Replacing a special character does not work with gsub替换特殊字符不适用于 gsub
【发布时间】:2019-05-09 16:18:24
【问题描述】:

我有一个包含许多字符串的表,其中包含一些我想用“原始”字符替换的奇怪字符。 Ä 变成了 ä,ö 变成了 ö,所以我将文本中的每个 ö 替换为 ö。它可以工作,但是,ß 变成了 à ,我无法替换它...

# Works just fine:
gsub('ö', 'REPLACED', "Testing string ö")


# this does not work
gsub("Ã<U+009F>", "REPLACED", "Testing string Ã<U+009F> ")

# this does not work as well...
gsub("â<U+0080><U+0093>", "REPLACED", "Testing string â<U+0080><U+0093> ")

如何告诉 R 用我想插入的字母替换这些部分?

【问题讨论】:

  • 一些建议:奇怪的字符显然是由于一些编码问题。在读取文件时处理这个问题可能是值得的,而不是稍后使用正则表达式。您可以为此使用readr 的软件包。使用guess_encoding("file.txt") 查找编码,然后使用read_csv("file.txt", locale = locale(encoding = "ISO-8859-1")) 导入,其中“ISO-8859-1”可以换成guess_encoding 建议的任何编码(“ISO-8859-1”只是一个建议,因为变音)。

标签: r gsub stringr


【解决方案1】:

由于有元字符(+ - 表示一个或多个),为了从字面上评估它,要么转义(如解决方案中提到的@boski)或使用fixed = TRUE

sub("Ã<U+009F>", "REPLACED", "Testing string Ã<U+009F> ", fixed = TRUE)
#[1] "Testing string REPLACED "

【讨论】:

    【解决方案2】:

    您必须转义 + 符号,因为它是 regex 命令。

    > gsub("Ã<U\\+009F>", "REPLACED", "Testing string Ã<U+009F> ")
    [1] "Testing string REPLACED "
    
    > gsub("â<U\\+0080><U\\+0093>", "REPLACED", "Testing string â<U+0080><U+0093> ")
    [1] "Testing string REPLACED "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2014-08-09
      • 2016-03-03
      • 1970-01-01
      • 2019-09-23
      相关资源
      最近更新 更多