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

标签 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 & C D & E”的输出。

最佳答案

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

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

DEMO

关于regex - gsub 没有替换 R 中的所有预期匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656639/

相关文章:

r - 如何在 networkD3 的 sankeyNetwork 中为组着色?

r - sparklyr hadoop配置

r - 在 R 的正则表达式中使用变量值

R: gsub 标点字符只出现在字符串的末尾

regex - 匹配数字的正则表达式

javascript - 第一个和最后一个引号之间的匹配字符串

c# - 从字符串中获取特定的单词c#

regex - 这个空白藏在哪里?

r - 在我的 Latex 表中使用 kableExtra() 破坏超链接

r - 使用 mapply 将向量中的模式替换为 tm 中向量中的替换