2017-02-05 5 views
2

Rでgrepを使用するときに特定の文字を除外しようとしていますが、私が期待した結果を得ることができません。このgrep除外がRで機能しないのはなぜですか?

x <- c("a", "ab", "b", "abc") 
grep("[^b]", x, value=T) 
> [1] "a" "ab" "abc" 

私はbを含まないベクターxで何かをつかむしたい:ここ

はコードです。 "ab"または​​を返さないでください。

最終的に私は"a"なく"b"が含まれている任意の要素をピックアップします。 これは私が期待した結果である:

grep("a[^b]", x, value=T) 
> [1] "a" 

はどのように私はそれを行うことができますか?

答えて

3

これを試してみてください:

それは文字列の先頭を探し
grep("^[^b]*a[^b]*$", x, value=TRUE) 
# [1] "a" 

は、その後ではありませんし、「B」ではありません任意の数の文字、「A」、その後、任意の数の文字を許可します"b"をもう一度入力すると文字列の最後に到達します。

1

invertプロパティはgrepで、一致しないvaluesが返されます。そこでここには "b"がない値が返されます。

grep("b", x, value = TRUE, invert = TRUE) 
#[1] "a" 
1

私はgrepの中で、この正規表現を使用して、あなたが探しているものの結果を、持っている:

grep("^[^b]*$", x, value=TRUE) 
[1] "a" 
+0

をそうでもありません。この正規表現は '' aa ''を拒否します。 –

+0

はい、それは本当です。しかし、正規表現を使用して "aa"を受け入れる作業はありませんでした。とにかく、この問題を解決するために「*」を追加します。はい?最後に、正規表現は次のようになります。 'grepを( "^ [^ B] * $"、X、値= TRUE)' – jvb

+0

タスクが "B" =>特に、 "AA" を受け入れる含まれているものを拒絶するようにしました。私はregexpの専門家ではありませんが、あなたの新しい提案はうまくいくようです。 –

関連する問題