【问题标题】:gsub not replacing all expected matches in Rgsub 没有替换 R 中的所有预期匹配项
【发布时间】:2016-01-07 13:41:34
【问题描述】:

假设我有字符串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”的输出。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

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

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

    DEMO

    【讨论】:

    • 完美解释。谢谢!
    猜你喜欢
    • 2015-10-09
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多