bugfix> r > 投稿

多数のアドレスを正規化しようとすることに困惑しています。 \\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 件
  • ネガティブな先読みでPCRE正規表現を使用できます。

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

    正規表現のデモをご覧ください。

    詳細

    \\b  -単語の境界

    SE Kellogg  -リテラル部分文字列

    \\b  -単語の境界

    (?!\\s+Court\\b)  -現在の場所のすぐ右側にある場合、マッチに失敗するネガティブ先読み

    \\s+  -1つ以上の空白文字

    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)
             ^          ^                       ^^^  
    
    

あなたの答え