2
と仮定私はfield:foo
になるだろうと予想regexr.comに基づいて、次のマッチ文字が
txt <- "client:A, field:foo, category:bar"
grep("field:[A-z]+", txt, value = TRUE, perl = TRUE)
を実行しますが、代わりに私は、文字列全体を取得します。どうしてこれなの?
と仮定私はfield:foo
になるだろうと予想regexr.comに基づいて、次のマッチ文字が
txt <- "client:A, field:foo, category:bar"
grep("field:[A-z]+", txt, value = TRUE, perl = TRUE)
を実行しますが、代わりに私は、文字列全体を取得します。どうしてこれなの?
値を抽出すると思われるようです。 regmatches
を使用します。
txt <- "client:A, field:foo, category:bar"
regmatches(txt, regexpr("field:[[:alpha:]]+", txt))
# => [1] "field:foo"
はR demoを参照してください。
複数の一致を一致させるには、regexpr
をgregexpr
に置き換えます。
または使用はstringrstr_extract_all
:
library(stringr)
str_extract_all(text, "field:[a-zA-Z]+")
もう一つのポイントは、その[A-z]
matches more than ASCII lettersです。 TRE(regexpr
/gregexpr
にperl=TRUE
がない)/ ICU(stringr)正規表現で[[:alpha:]]
を使用して、任意の文字に一致させてください。
これはとてもうまく動作しますが、元の試行がうまくいかない理由はまだ分かりません。 –
@ T'n'Eあなたのコードでは、['grep'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html)を使用します。この関数は、パターンに一致する(または操作を逆にすると一致しない)文字ベクトルを返します。文字ベクトルからのマッチは*抽出されません。 –
ああ、私は_matched_の値を抽出するために、_matched_ではなくパラメータに値を誤解しました。私は混乱していると思うが、それを得た - ありがとう! –