使用gsub替换R中的多个单词

时间:2018-06-26 07:02:24

标签: r regex string gsub

我一直在试图规范一堆地址。使用\\b\\b时是否存在与gsub()类似的正则表达式,但可以替换多个单词?

address <- c("SE Kellogg", "SE Kellogg Court")
gsub("\\bSE Kellogg\\b", "SE Kellogg Court", address)

#desired output:
"SE Kellogg Court" "SE Kellogg Court"

# actual output
"SE Kellogg Court" "SE Kellogg Court Court"

1 个答案:

答案 0 :(得分:5)

您可以使用前瞻性为负的PCRE正则表达式:

\bSE Kellogg\b(?!\s+Court\b)

请参见the regex demo

详细信息

  • \\b-单词边界
  • SE Kellogg-文字子字符串
  • \\b-单词边界
  • (?!\\s+Court\\b)-如果在当前位置的右边立即有一个否定的前瞻,则匹配失败
    • \\s+-一个或多个空格字符
    • Court\\b-整个词Court

R demo

> gsub("\\bSE Kellogg\\b(?!\\s+Court\\b)", "SE Kellogg Court", address, perl=TRUE)
[1] "SE Kellogg Court" "SE Kellogg Court"

请注意,如果您在搜索词组周围使用捕获组((...),并在替换模式中使用\1后向引用,则可以缩短替换时间:

gsub("\\b(SE Kellogg)\\b(?!\\s+Court\\b)", "\\1 Court", address, perl=TRUE)
         ^          ^                       ^^^