字符串替换为正则表达式条件

String replace with regex condition

我有一个要匹配并用 X 替换的模式。但是,我只希望在前面的字符是 A、B 或前面没有任何字符(字符串开头)时替换该模式).

我知道如何使用 str_replace_all 函数替换模式,但我不知道如何添加此附加条件。我使用以下代码:

library(stringr)

string <- "0000A0000B0000C0000D0000E0000A0000"
pattern <- c("XXXX")



replacement <- str_replace_all(string, pattern, paste0("XXXX"))

结果:

[1] "XXXXAXXXXBXXXXCXXXXDXXXXEXXXXAXXXX"

想要的结果:

仅当前承租人为A、B或无字符时才更换:

[1] "XXXXAXXXXBXXXXC0000D0000E0000AXXXX"

您可以使用

gsub("(^|[AB])0000", "\1XXXX", string)

regex demo

详情

  • (^|[AB]) - 捕获组 1 (</code>):字符串开头 (<code>^) 或 (|) AB ([AB])
  • 0000 - 四个零。

R demo:

string <- "0000A0000B0000C0000D0000E0000A0000"
pattern <- c("XXXX")
gsub("(^|[AB])0000", "\1XXXX", string)
## -> [1] "XXXXAXXXXBXXXXC0000D0000E0000AXXXX"

能否请您尝试以下。这里使用正向先行法。

string <- "0000A0000B0000C0000D0000E0000A0000"
gsub(x = string, pattern = "(^|A|B)(?=0000)((?i)0000?)",
    replacement = "\1xxxx", perl=TRUE)

输出如下。

[1] "xxxxAxxxxBxxxxC0000D0000E0000Axxxx"

感谢 Wiktor Stribiżew 的回答!它也适用于 stringr 包:

library(stringr)

string <- "0000A0000B0000C0000D0000E0000A0000"
pattern <- c("0000")

replace <- str_replace_all(string, paste0("(^|[AB])",pattern), "\1XXXX")
replace

[1] "XXXXAXXXXBXXXXC0000D0000E0000AXXXX"