2017-08-01 9 views
4

のいずれかが区切り文字になることを意味するstrsplit(str, '[,-\\+]')を使用して文字列を分割しようとしています。しかし、私はこのパターンが数字と大文字とも一致しているようだ。 '[,-\\]'一致するすべての数字、大文字、',''-'であるように思わなぜ '[、 - \]'が '46'、 'X'、 'A'と一致するのですか?

  • grep('[,-\\]', 'X'), returns 1
  • grep('[,-\\]', '46'), returns 1
  • grep('[,-\\]', '-'), returns 1
  • grep('[,-\\]', ','), returns 1

を試してみてください。

私はちょうどなぜこれが当てはまるのか分かりません。

はあなたが,+または-に分割する

strsplit(str, '[,+-]') 

を使用する必要がある任意の入力

+0

'[\\ +、 - ]'のようなパターンの順序を変更すると、 '+'、 '、'、 ' - 'にのみ一致します。私は混乱しています –

+0

[ハイフンと正規表現をマッチングさせるにはどうすればいいですか?](https://stackoverflow.com/questions/4068629/how-to-match-hyphens-with-regular-expression) –

答えて

3

いただきありがとうございます。分割するには\を追加する必要がある場合は、デフォルトの TRE正規表現エンジンを使用して'[,\\+-]'を使用してください。

-がブラケット式の最後(または先頭)にあるときは、リテラルハイフンとして解析されます。あなたのケースでは、範囲演算子として扱われ、'[,-\\]',\間の文字の範囲に一致します。あなたはここでTRE正規表現の風味を使用している

enter image description here

注意(何perl=TRUEが指定されていないため)、したがって、二重バックスラッシュは、正規表現パターンでリテラルバックスラッシュとして扱われます。 "[,-\\]"パターンを解析するためにPCRE正規表現エンジンを使用した場合、パターンは無効になります。文字列リテラルに4つのバックスラッシュを含むバックスラッシュを定義する必要があります。

+1

これは意味があります私!ありがとう!! –

関連する問題