2017-08-10 10 views
1

質問は非常に簡単かもしれませんが、私はRに新しく、この文字列 "Primary、pupils"に一致するいくつかの文字列を列から抽出しようとしています。だから私はこのコンマで一致する文字列

grepl("(.*?)primary,[:space:] pupils(.*?)", df$some_column,ignore.case=TRUE) 

grepl("(.*?)primary,[:space:](.*?)", df$some_column,ignore.case=TRUE) 

を試みたが、それらのどれも動いていないようにみえます。誰かがアイデアを持っていますか?

+0

は' r'を "話す" はいけない、しかし、あなたは持っている[:スペース:] '**だけでなく**最初の式における実空間として。それは意図されていますか? – ClasG

+0

'。*?'は 'grep' /' grepl'で冗長であることに注意してください。これらの関数は*部分一致*を許します(=完全な文字列の一致は必要ありません)。 –

答えて

2

あなたは

grepl("primary,[[:space:]]*pupils", df$some_column,ignore.case=TRUE) 

を使用することができるパターンが一致します。

  • primary,から0以上の空白 - litealサブ
  • [[:space:]]*(大文字と小文字を区別しないモードが原因ignore.case=TRUE引数にONです)
  • pupils - リテラルpupils部分文字列(case insensitiv E)

[:space:] POSIX文字クラスは、そうでない場合、それは[...]内で定義された単一の文字に一致し、ブラケット表現の中に含まれるべきであるということである、[:space:]は、単一の文字にマッチします::を、sp,a,cまたはeである。

small demoを参照してください: `

x <- c("1 primary, pupils", "2 PRIMARY,pupils tex", "no value") 
grepl("primary,[[:space:]]*pupils", x,ignore.case=TRUE) 
## => [1] TRUE TRUE FALSE 
grep("primary,[[:space:]]*pupils", x,ignore.case=TRUE, value=TRUE) 
## => [1] "1 primary, pupils" "2 PRIMARY,pupils tex"