2012-01-10 38 views
0

のリストをマッチングは、私は正規表現を使用して次の文を解析する正規表現

(?<bullet>\(o\)\) (?<text>.+) 

何I達成したいのは、textグループの3つの試合、すなわち、

Multi 
line 
text 

そして次に2回Single line textとなる。

ソリューションが先読み/背後の場合は、これをどのように使用するのですか?

ありがとうございました。

答えて

2

あなたは次の(O)または入力で正規表現を使うのはなぜ

(?<bullet>\(o\)) (?<text>.*?)(?=\(o\)|$)

+0

魅力的な作品です。しかしアスタリスクの後の疑問符はどういう意味ですか? – grizzly

+1

それは、その怠け者であるか不本意かを意味します。基本的に、一致するテキストの量は最小です。あなたはそれについてここで読むことができますhttp://www.regular-expressions.info/repeat.html –

0

正規表現の末尾にa(o)またはEOFを追加するだけで、次の箇条書きまたはファイルの最後で切り取ることができます。私はあなたに正規表現を与えるためにどの正規表現を使用しているのかわかりませんが、その考えはそれにマッチすることです。

ここでは、通常の正規表現でEOFを一致させる方法は次のとおりです。 regex to match EOF

0

の終了を確認するために先読みを使用することができますすべて? 2つの場合があるようです - 行が行頭で始まるか始まらないか。もし弾丸で始まっているのなら、それをカットし、残りの行で新しいテキストオブジェクトを開始します。箇条書きで始まらない場合は、そのテキストを前のテキストオブジェクトに追加します。擬似コード:

text = [] 
i = -1 
for line in data: 
    if line.starts_with('(o)'): 
     i += 1 
     text[i] = line[2:] # all characters in the line after the first three 
    else: 
     text[i].append(line) 
+0

ありがとう、それは動作しますが、私は特に正規表現を使用する必要があります。 – grizzly

+0

残念です。私は正規表現を書くだけの言語と見なして、最も単純な正規表現以外のすべてを最後の手段として維持しようとします。正規表現の周りにいくつかの明確なコメントを入れてください。そうすれば、6ヶ月以内に戻ってくると解読する必要はありません。 –

関連する問題