パターンの特定の部分文字列にパイプ(正規表現OR)を適用して、グループとそれに続く文字セットまたはEOLのいずれかに一致するようにするにはどうすればよいですか?

popeye_the_sailorman

一連の質問と回答がありますが、質問ごとに分けたいと思います。

s = 'Q1 blah1 Ans BLAH1 Q2 blah2 Ans BLAH2'
re.split('(Q\d.*?)Q\d', s)

結果:

['', 'Q1 blah1 Ans BLAH1 ', ' blah2 Ans BLAH2']

「Q#」で始まり、その後に別の「Q#」または行の終わりが続く部分をキャプチャしたいと思います。だから私はこれを使ってみました:

re.split('(Q\d.*?)Q\d|$', s)
['', 'Q1 blah1 Ans BLAH1 ', ' blah2 Ans BLAH2']

この:

re.split('(Q\d.*?)(Q\d|$)', s)
['', 'Q1 blah1 Ans BLAH1 ', 'Q2', ' blah2 Ans BLAH2']

しかし、彼らは私に望ましい結果を与えません。の不適切な使用法のため、最初のケースでは機能しませんが|、修正方法がわかりません。2番目のケースでは、Q2はと一緒にキャプチャされませんblah2 Ans BLAH2

編集:

必要な出力:

['', 'Q1 blah1 Ans BLAH1 ', 'Q2 blah2 Ans BLAH2']
Tim Biegeleisen

次のパターンで分割してみてください。

\s+(?=Q\d+)

これは、次の質問が開始されていることを表明しますが、消費しないポジティブ先読みアサーションを使用します。

s = 'Q1 blah1 Ans BLAH1 Q2 blah2 Ans BLAH2'
print re.split('\s+(?=Q\d+)', s)

['Q1 blah1 Ans BLAH1', 'Q2 blah2 Ans BLAH2']

デモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ