2016-03-26 8 views
1

stringrパッケージのstr_extract機能を持つ非キャプチャグループを使用しようとしています。ここでは一例です:私は、それはこの記事のようにのみRの文字列を使用している非キャプチャグループの正規表現

"oo" 

を返すことを期待しながら、

library(stringr) 
txt <- "foo" 
str_extract(txt,"(?:f)(o+)") 

これは

"foo" 

を返します:私は不使用するにはどうすればよいhttps://stackoverflow.com/a/14244553/3750030

をR内のグループをキャプチャして、使用中にグループの内容を戻り値から削除するマッチング?

+0

'str_extract(TXT、 "(<= F)(O +)を?")してみてください' – akrun

答えて

3

正規表現(?:f)(o+)を使用している場合、これはになりません。をキャプチャしますが、必ず一致します。それは繰り返し同じ列に一致または捕捉文字列を置換するために使用することができるように何を意味撮影

は、逆参照するためのメモリで記憶しています。

この記事のように:あなたはその答えを誤解https://stackoverflow.com/a/14244553/3750030

非キャプチャグループは意味しません。不一致。グループの前にグループがないので、$1(グループ1)に取り込まれます。

あなただけ試合はその後、あなたがこのようなpositive lookbehindを使用する必要があります続いBを想定したい場合。

正規表現:(?<=f)(o+)

説明:

  • (?<=f)これは、次のトークンの背後に存在することがfを探しますが、とは一致しません。

  • (o+)前の条件が真である場合、これはグループ(ここでは$ 1)としてキャプチャにマッチしてます。

Regex101 Demo

+2

はFYI:捕捉基はstr_extract' 'とアクセスできない。代わりに 'str_match'を使用してください。この場合、 '(?<= f)o +'で十分です。 –

+0

これを今すぐ入手してください!詳細な説明をありがとう! – user3750030

関連する問題