gsub没有替换R中的所有预期匹配

时间:2016-01-07 13:41:35

标签: regex r gsub

假设我有字符串x <- "AbC",我想在每个字母之间插入一个&符号。我原以为我可以做gsub("([a-zA-Z])([a-zA-Z])", "\\1 & \\2", x),但这会产生“A&amp; bC”。为什么gsub不识别与正则表达式匹配的第二组字母?它不像gsub只替换找到的第一个匹配。如果我有x <- "AbC DE"并运行相同的命令,我会得到“A&amp; bC D&amp; E”。

我对gsub如何替代它有何看法?我希望从上面的两个输入中得到“A&amp; b&amp; C”和“A&amp; b&amp; C D&amp; E”的输出。

1 个答案:

答案 0 :(得分:10)

因为如果一个角色中存在一个角色,则正则表达式引擎不会再次匹配相同的角色。也就是说,它不会重叠匹配。使用环视来克服这个......

gsub("([a-zA-Z])(?=[a-zA-Z])", "\\1 & ", x, perl=T)

DEMO