2017-02-02 2 views
1

パターンに一致する文字列を含む問題があります。Rです。 regexを使用している場合POSIX文字クラスは基底R正規表現では機能しません

([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+ 

「アドレスを取得するために、次のように:

私はテキストがregex以下"lettersornumbersorspaces y lettersornumbersorspaces".

私が使用しているようなものがあるときgreplTRUEを取得しようとしています"期待どおりに動作します。

regex <- "([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+" 
address <- str_extract(fulltext, regex) 

私はそのアドレスが必要なテキストであることを確認します。今、私は次のようにTRUEを取得するためにgreplを使用する場合:

grepl("([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+", address,ignore.case = TRUE) 

FALSEが返されます。これはどのように可能ですか?私は同じregexを使用してTRUEを取得しています。私はgreplのパラメータを変更しようとしましたが、これらのパラメータはこれに関連していません。

テキストの例は次のとおりです。"26 de Marzo y Pareyra de la Luz"

感謝!!

+0

POSIX文字クラスは、ブラケット式の中に指定する必要があります。 '[:alnum:]' - > '[[:alnum:]]'となります。また、 'grepl'でPCREパターンを使い、' perl = TRUE'を追加したいと思うようです。 –

+0

それは働いた!ありがとう!! =) –

+0

それはあなたのために働いてうれしい。答えを受け入れることを検討してください([回答を受け入れる方法](http://meta.stackexchange。com/questions/5234/how-does-accepting-an-answer-work)を参照してください)。 –

答えて

2

なおstringr ICU正規表現エンジンPOSIX文字クラスはブラケット表現内部でなければならない、基地R正規表現フレーバー(PCRE(perl=TRUE)とTREの両方)において、パターンにおける裸POSIX文字クラスをサポートします。 [:alnum:] - >[[:alnum:]]

x <- c("AZaz09 y AZaz09", "ĄŻaz09 y AZŁł09", "26 de Marzo y Pareyra de la Luz") 
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x) 
## => [1] TRUE TRUE TRUE 
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x, perl=TRUE) 
## => [1] TRUE TRUE TRUE 

あなたは一人で[:alnum:]を使用する場合online demo

を参照してください、それは単一の文字、:alnumにマッチするシンプルなブラケット表現です。

パターンは詳細:

  • [[:alnum:][:blank:]]+ - 1+英数字または水平空白記号
  • [[:blank:]] - 1水平空白記号
  • [yY] - のいずれかy又はY
  • [[:blank:]] - 1水平空白記号
  • [[:alnum:][:blank:]]+ - 1つ以上の英数字または水平空白記号
関連する問題