2012-05-04 27 views
2

内部企業Webアプリケーションのテキスト領域のテキストからいくつかのオプションを抽出する次のPythonスクリプトに問題があります。カンマまたは改行に一致する正規表現ですが、両方は一致しません

import re 

text = 'option one\noption two, option three, option four' 
correct = 'option one, option two, option three, option four' 

pattern = re.compile('(\s*[,]\s*)') 
fixed = pattern.sub(', ', text) 

print fixed 
option one 
option two, option three, option four 

print fixed.split(', ') 
['option one\noption two', 'option three', 'option four'] 

これは明らかに分割することができない「オプションの1」に「オプション1を2 nオプション\」、「オプション2つの」

ので、入力は希望

option one 
option two, option three, option four 

として終わる可能性

option one, option two, option three, option four 

に変換する必要があり、それが正常に動作しますその場合はカンマ

または

ではなく、改行が続くコンマ

あればそれだけでそのわずか改行。

答えて

4

は多分、[,]から[,\n]にあなたの文字クラスを拡張しますか?また、最初に検索と置換を行うのではなく、正規表現を分割して分割するのはなぜですか?この機能:http://docs.python.org/library/re.html?highlight=re.split#re.splitがこれに便利です。

+0

're.split'は確かに答えです。 –

+0

私は少し奇妙な分割方法に気付かなかった!しかし、私はとにかくpythoniteではありません... :) –

+0

ニース、 '(\ s * [、\ n] \ s *)は完璧に働いています、ありがとうtdammers :-) – nih

3

は、あなただけの

(\s*(,|\n)\s*) 

を試すことはできますか?

または、おそらくより良い

(\s*[,\n]\s*) 

...私はいつもあなたが文字クラスに\nを置くことができます忘れて...

+0

ああ、正解が最初に出されたことに気がつかなかったのですが、それが起こったときに「完了したこと」は何ですか?これは私の最初の質問であるのでわからない... – nih

+0

@nih that's問題。私はtdammersはあなたが単に試合に分割することを示唆しているので、より完全な答えを与えていると言いますが。それに何もない場合、私は通常、最小の担当者を持っている人にそれを渡します:D –

2

私は正規表現せずにそこに着いた:

print [x.strip() for x in text.replace('\n', ', ').split(', ')] 

結果:

['option one', 'option two', 'option three', 'option four'] 

が、私はこれがあなたの利用ケースのために良い答えであると主張していませんが。余分なデリミタを追加する必要がある場合は、それぞれに追加の.replace()を追加することを意味します。

関連する問題