字符串替换为正则表达式条件
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)
详情
(^|[AB])
- 捕获组 1 (</code>):字符串开头 (<code>^
) 或 (|
) A
或 B
([AB]
)
0000
- 四个零。
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"
我有一个要匹配并用 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)
详情
(^|[AB])
- 捕获组 1 (</code>):字符串开头 (<code>^
) 或 (|
)A
或B
([AB]
)0000
- 四个零。
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"