2017-08-21 5 views
2

と仮定私はfield:fooになるだろうと予想regexr.comに基づいて、次のマッチ文字が

txt <- "client:A, field:foo, category:bar" 
grep("field:[A-z]+", txt, value = TRUE, perl = TRUE) 

を実行しますが、代わりに私は、文字列全体を取得します。どうしてこれなの?

答えて

3

値を抽出すると思われるようです。 regmatchesを使用します。

txt <- "client:A, field:foo, category:bar" 
regmatches(txt, regexpr("field:[[:alpha:]]+", txt)) 
# => [1] "field:foo" 

R demoを参照してください。

複数の一致を一致させるには、regexprgregexprに置き換えます。

または使用はstringrstr_extract_all

library(stringr) 
str_extract_all(text, "field:[a-zA-Z]+") 

もう一つのポイントは、その[A-z] matches more than ASCII lettersです。 TRE(regexpr/gregexprperl=TRUEがない)/ ICU(stringr)正規表現で[[:alpha:]]を使用して、任意の文字に一致させてください。

+0

これはとてもうまく動作しますが、元の試行がうまくいかない理由はまだ分かりません。 –

+0

@ T'n'Eあなたのコードでは、['grep'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html)を使用します。この関数は、パターンに一致する(または操作を逆にすると一致しない)文字ベクトルを返します。文字ベクトルからのマッチは*抽出されません。 –

+1

ああ、私は_matched_の値を抽出するために、_matched_ではなくパラメータに値を誤解しました。私は混乱していると思うが、それを得た - ありがとう! –

関連する問題