我一直在试图规范一堆地址。使用\\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"
答案 0 :(得分:5)
您可以使用前瞻性为负的PCRE正则表达式:
\bSE Kellogg\b(?!\s+Court\b)
请参见the regex demo。
详细信息
\\b
-单词边界SE Kellogg
-文字子字符串\\b
-单词边界(?!\\s+Court\\b)
-如果在当前位置的右边立即有一个否定的前瞻,则匹配失败
\\s+
-一个或多个空格字符Court\\b
-整个词Court
。> 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)
^ ^ ^^^