8
namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
grepl("[patternz]$",namez)

それは動作しません。正規表現がpatternz変数の内容と一致するように、[patternz]を何に置き換える必要がありますか?

[編集]数字の「0」と「3」を別々に一致させるのではなく、文字列「03」を一致させたいことに注意してください。

4

3 に答える 3

10

ここで問題が何であるかを確認するのに苦労していることを認めなければなりません。例としては、

R> namez <- c("foo2003", "bar2340", "naught45")
R> patternz <- "03"
R> grepl(patternz, namez)
[1]  TRUE FALSE FALSE

文字ベクトルと同様に必須でpatternz あり、目的は0 3と一致することではなく、リテラルと一致することです。"03"

文字列の最後でのみ一致させる必要がある場合は、"$"手動で追加する必要があります。

R> patternz2 <- "03$"
R> grepl(patternz2, namez)
[1]  TRUE FALSE FALSE

paste0()または操作を介して

R> grepl(paste0(patternz, "$"), namez)
[1]  TRUE FALSE FALSE

問題はpatternz、実際の正規表現とベースR関数がこれを完全に処理するために使用することです。

于 2012-08-31T12:09:45.157 に答える
5

の文字ベクトルを作成する必要があるようですがgrepl()、使用paste0()はうまくいくようですが、それほどエレガントではありません。

> grepl(paste0("[", patternz, "]$"), namez)
[1]  TRUE  TRUE FALSE
于 2012-08-31T02:53:18.997 に答える
4

パッケージgsubfnはあなたの友達です

library(gsubfn)
namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
fn$grepl("[$patternz]$",namez)

#> fn$grepl("[$patternz]$",namez)
#[1]  TRUE  TRUE FALSE

もともと、文字列の最後に0または3を一致させたいと指定しました。あなたのコメントでは、おそらく「03」と一致させたいとほのめかしています。

fn$grepl("$patternz$",namez)

より適切でしょう。

また

fn$grepl("`patternz`$",namez)

$この場合、は二重の意味を持つため、より適切な場合があります。

于 2012-08-31T03:24:05.173 に答える