July 29, 2020

R:記号を含む文字列を検索する際の注意点

Rで記号を含む文字列を扱う際には、正規表現に注意が必要だ。

例えば、以下の文字列strから、(12)の場所を探すことを考える。
str <- c("(12)", "(123)", "(132)")

grepやstr_matchで"(12)"を検索にかけると、"(123)"まで選ばれてしまう。
grep("(12)", str)
[1] 1 2

これは、rの正規表現(Regular expression)に則ると括弧が認識されないので、実質的に"12"で検索している状態となっていることが原因である。

ここで(12)だけを抽出するためには、
1. 括弧を"\\("または"\\)"で表現する または、
2. "\\b"で境界を作る と良い。
grep("\\(12\\)", str)
[1] 1
grep("\\b(12)\\b", str)
[1] 1

(追記)
fixed = TRUE を挿入すると、正規表現ではない文字として扱ってもらえる。
grep("(12)", str, fixed = TRUE)
[1] 1




No comments:

Post a Comment