2017-04-11 10 views
4

:この問題の私のバリアントの複数の区切り記号に分割されたpython?私はこの先に、尋ねた質問への回答を見ていた

Split Strings with Multiple Delimiters?

、私はは、文字の特定のセットからませんでしたすべてのものに分割することを望んでいました。この明らかなバグが見つかるまで、私が好きな解決策に私を導いた。これは私がよく知らないPythonのバグですか?それはカンマ(「」)ではない分割を行い、なぜ私は、カンマが私の例外リストにないであることを考えると、

>>> b = "Which_of'these-markers/does,it:choose to;split!on?" 
>>> b1 = re.split("[^a-zA-Z0-9_'-/]+", b) 
>>> b1 
["Which_of'these-markers/does,it", 'choose', 'to', 'split', 'on', ''] 

を理解していませんよ?あなたがそれを置く、Pythonのreパターンでリテラルハイフンを入れる必要がある場合

enter image description here

+1

おそらく '' - /'のためです。範囲と解釈されます。 – Rahul

答えて

7

文字クラス内の'-/はカンマを含む範囲を作成し

  • 開始時:[-A-Z](大文字のASCII文字と一致し、-
  • 最後に:(-または+、大文字のASCII文字に一致する)
  • またはちょうどそれをエスケープ:は、有効範囲の後
  • ()または-、大文字のASCII文字に一致します)。

あなたは正しい、スタンドアロンのシンボル([\w-+]のように、それは悪い文字範囲エラーが発生します)の前に、速記の後にそれを置くことはできません。これは.NETやいくつかの正規表現のフレーバで有効ですが、Python reでは有効ではありません。

ハイフンを最後に置くか、エスケープします。

使用

re.split(r"[^a-zA-Z0-9_'/-]+", b) 

のPython 2.7で、あなたも

re.split(r"[^\w'/-]+", b) 
+0

'\ 'のようなものは' [] 'の中で動作しませんでした。ありがとう! –

+0

ああ、ありがとう!振り返って明らかだが、それを考えなかっただろう! :) – dipankar

+2

Pythonの 're'パターンの文字クラスにリテラル' -'を入れたときの注意点をいくつか追加しました。この情報はSOで見つけることができますが、異なる回答に散らばっているようです。 –

2

'-/にそれを縮小することができる範囲が,有するASCII値44を含む47 39からascii値を有するものと解釈されます。

-は、先頭または末尾または文字クラスのいずれかに入力する必要があります。

関連する問題