如何替换R中数字旁边而不是字母数字旁边的字符

How replace character next to numeric but not next to alphanumeric in R

我有这个字符串

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"

提前致谢。

在您的示例中,您将数字 分号替换为 |。相反,您可以使用括号捕获数字并将其替换为表达式中的 \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"

{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 (?<=...) 基本上检查后面的表达式是否在 ... 之前。 如果你想在 baseR 中使用它,那么:

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