Использование gsub для замены нескольких слов в R - PullRequest
0 голосов
/ 26 июня 2018

Я застреваю при попытке нормализовать кучу адресов.Есть ли другое регулярное выражение, которое ведет себя подобно \\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 голосов
/ 26 июня 2018

Вы можете использовать регулярное выражение PCRE с отрицательным прогнозом:

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

См. Демонстрационное выражение .

Детали

  • \\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"

Обратите внимание, что вы можете сократить замену, если вы используете группу захвата ((...)) вокруг поисковой фразы и обратную ссылку \1 в шаблоне замены:

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