【问题标题】:How replace character next to numeric but not next to alphanumeric in R如何在R中替换数字旁边的字符而不是字母数字旁边的字符
【发布时间】:2020-10-23 00:06:21
【问题描述】:

我有这个字符串

char <- "866224; Genoma viral SARS-CoV-2: Detectable; 1096628; Genoma viral SARS-CoV-2: No detectable"

我需要更换;旁边有 | 的数字但保持;像这样的字母数字旁边:

"866224| Genoma viral SARS-CoV-2: Detectable; 1096628| Genoma viral SARS-CoV-2: No detectable"

我正在尝试使用 str_replace_all

str_replace_all(char, "[0-9];", "|")

但删除最后一个数字。

"86622| Genoma viral SARS-CoV-2: Detectable; 109662| Genoma viral SARS-CoV-2: No detectable"

提前致谢。

【问题讨论】:

  • 也删除最后一个数字。
  • 在基础 R 中:gsub('([0-9]);', '\\1|', char)

标签: r text-mining stringr


【解决方案1】:

在您的示例中,您将数字替换为|。相反,您可以使用括号捕获数字并将其在表达式中替换为 \\1

library(stringr)

char <- "866224; Genoma viral SARS-CoV-2: Detectable; 1096628; Genoma viral SARS-CoV-2: No detectable"

str_replace_all(char, "([0-9]);", "\\1|")
#> [1] "866224| Genoma viral SARS-CoV-2: Detectable; 1096628| Genoma viral SARS-CoV-2: No detectable"

【讨论】:

    【解决方案2】:

    {stringr} 包允许前瞻和后瞻,您可以使用它们而不是实际捕获最后一个数字然后粘贴它:

    char <- "866224; Genoma viral SARS-CoV-2: Detectable; 1096628; Genoma viral SARS-CoV-2: No detectable"
    str_replace_all(char, "(?<=[0-9]);", "|")
    #> [1] "866224| Genoma viral SARS-CoV-2: Detectable; 1096628| Genoma viral SARS-CoV-2: No detectable"
    

    lookbehind (?&lt;=...) 基本上检查后面的表达式是否以... 开头。 如果你想在baseR 中使用它,那么:

    gsub("(?<=[0-9]);", "|", char, perl=TRUE)
    #> [1] "866224| Genoma viral SARS-CoV-2: Detectable; 1096628| Genoma viral SARS-CoV-2: No detectable"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2020-11-09
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2017-09-05
      相关资源
      最近更新 更多