我有一个要匹配并用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"
答案 0 :(得分:2)
您可以使用
gsub("(^|[AB])0000", "\\1XXXX", string)
请参见regex demo
详细信息
(^|[AB])
-捕获组1(\1
):字符串(^
或(|
)A
或B
( [AB]
)0000
-四个零。string <- "0000A0000B0000C0000D0000E0000A0000"
pattern <- c("XXXX")
gsub("(^|[AB])0000", "\\1XXXX", string)
## -> [1] "XXXXAXXXXBXXXXC0000D0000E0000AXXXX"
答案 1 :(得分:0)
能否请您尝试以下。在此使用正向超前方法。
string <- "0000A0000B0000C0000D0000E0000A0000"
gsub(x = string, pattern = "(^|A|B)(?=0000)((?i)0000?)",
replacement = "\\1xxxx", perl=TRUE)
输出如下。
[1] "xxxxAxxxxBxxxxC0000D0000E0000Axxxx"
答案 2 :(得分:0)
感谢WiktorStribiżew的回答!它也适用于stringr软件包:
library(stringr)
string <- "0000A0000B0000C0000D0000E0000A0000"
pattern <- c("0000")
replace <- str_replace_all(string, paste0("(^|[AB])",pattern), "\\1XXXX")
replace
[1] "XXXXAXXXXBXXXXC0000D0000E0000AXXXX"