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\nオプション 2」を「オプション 1」、「オプション 2」に分割できません。

したがって、入力は次のようになります

option one
option two, option three, option four

これはに変換する必要があります

option one, option two, option three, option four

コンマの場合は正常に機能します

また

コンマの後に改行

しかし、それ自体が単なる改行である場合はそうではありません。

4

3 に答える 3

4

[,]キャラクタークラスをからに拡張します[,\n]か?また、最初に検索して置換してから分割するのではなく、正規表現で直接分割してみませんか?この関数:http ://docs.python.org/library/re.html?highlight = re.split#re.splitはこれに便利です。

于 2012-05-04T10:24:31.513 に答える
3

試してみませんか

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

?

またはおそらくさらに良い

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

\n...文字クラスを入れることができることをいつも忘れています...

于 2012-05-04T10:22:28.017 に答える
2

私は正規表現なしでそこに着きました:

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

結果:

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

これがあなたの使用例に対する良い答えであるとは主張していません。区切り文字を追加する必要がある場合は、それぞれに余分な区切り文字を追加することを意味し.replace()ます。

于 2012-05-04T13:00:08.757 に答える