29

文字ベクトルから数字で始まる要素を抽出したいのですが、POSIX正規表現の構文について理解できないことがあります。

私はそれを思うだろう

vec <- c("012 foo", "305 bar", "other", "notIt 7")
grep(pattern="[:digit:]", x=vec)

1 2 4それらはどこかに数字がある4つの要素であるため、戻ります。しかし実際にはそれは戻ります3 4

要素1はゼロで始まるため、同様に期待どおりにgrep(pattern="^0", x=vec)戻ります。1ただし、これらは数字で始まる要素であるため、grep(pattern="^[:digit:]", x=vec)返さinteger(0)れると思いますが、返されます。1 2

構文をどのように誤解していますか?

4

3 に答える 3

38

試す

grep(pattern="[[:digit:]]", x=vec)

代わりに、コロン間の「メタパターン」には通常、二重括弧が必要です。

于 2012-07-17T15:07:32.747 に答える
12

別の解決策

grep(pattern="\\d", x=vec)
于 2012-07-17T16:15:09.333 に答える
6
man 7 regex

ブラケット式 内で、「[:」と「:]」で囲まれた文字クラスの名前は、そのクラスに属するすべての文字のリストを表します。標準の文字クラス名は次のとおりです。

         alnum       digit       punct
         alpha       graph       space
         blank       lower       upper
         cntrl       print       xdigit

したがって、括弧式の唯一のメンバーである文字クラスは、 のように二重括弧のように見えます[[:digit:]]。別の例として、[[:alnum:]]が と同等であると考えて[[:alpha:][:digit:]]ください。

于 2012-07-17T15:11:04.553 に答える