gsub 没有替换 R 中的所有预期匹配项
gsub not replacing all expected matches in R
假设我有字符串 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 & C D & E" 的输出。
因为如果一个字符出现在一次匹配中,正则表达式引擎将不会再次匹配相同的字符。也就是说,它不会进行重叠匹配。使用环视来克服这个问题。
gsub("([a-zA-Z])(?=[a-zA-Z])", "\1 & ", x, perl=T)
假设我有字符串 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 & C D & E" 的输出。
因为如果一个字符出现在一次匹配中,正则表达式引擎将不会再次匹配相同的字符。也就是说,它不会进行重叠匹配。使用环视来克服这个问题。
gsub("([a-zA-Z])(?=[a-zA-Z])", "\1 & ", x, perl=T)