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

phi*_*ndo 1 regex string r 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"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

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

\bSE Kellogg\b(?!\s+Court\b)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示.

细节

  • \\b - 一个单词边界
  • SE Kellogg - 一个文字子串
  • \\b - 一个单词边界
  • (?!\\s+Court\\b) - 如果在当前位置的右边,有一个失败的前瞻使得比赛失败
    • \\s+ - 一个或多个空格字符
    • Court\\b- 一句话Court.

R演示:

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

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

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

  • 这太棒了!谢谢你的详细解答.我现在应该能够将此解决方案转换为剩余的不匹配地址. (4认同)