假设我有字符串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"的输出.
因为如果一个字符存在于一个匹配中,则正则表达式引擎将不再匹配相同的字符.也就是说,它不会重叠匹配.使用环视来克服这个问题..
gsub("([a-zA-Z])(?=[a-zA-Z])", "\\1 & ", x, perl=T)
DEMO