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

bri*_*enb 2 regex r gsub

假设我有字符串x <- "AbC",我想在每个字母之间添加一个&符号.我本以为我可以这么做gsub("([a-zA-Z])([a-zA-Z])", "\\1 & \\2", x),但那会产生"A&bC".为什么不gsub识别与正则表达式匹配的第二组字母?这gsub不仅仅是取代找到的第一场比赛.如果我有x <- "AbC DE"并运行相同的命令,我会得到"A&bC D&E".

关于如何gsub更换它,我错过了什么?我希望从上面的两个输入中得到"A&b&C"和"A&b&CD&E"的输出.

Avi*_*Raj 10

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

gsub("([a-zA-Z])(?=[a-zA-Z])", "\\1 & ", x, perl=T)
Run Code Online (Sandbox Code Playgroud)

DEMO