2017-06-30 7 views
1

を存在しない可能性があり、私はこのテキスト正規表現:グループから除外し、文字列のことはあるいは

##### PRIORITY 
- Priority 1 
- Priority 2 

##### ISSUE TYPE 
<!--- comment --> 
- Problem/Case 
- Requirement 

を持っていると私はタイトル(優先順位、問題に基づいて、各カテゴリののみオプションを取得しようとしていますタイプ)。

私の正規表現は、このようなものです:私は三つのグループ(タイトル、コメント、コンテンツ)を分離している

(?:#####\s?issue type.*?)(?:<!---.*?-->)?(.*?)(?:#####|$) 

コメントブロックがない場合、正規表現は必要に応じて動作しますが、コメントブロックがある場合は、3番目の(コンテンツ)グループによってキャプチャされます。コメントセクションが存在する場合、3番目のグループから除外するにはどうすればよいですか?

私はこのような否定先読みしようとした:

(?:#####\s?issue type.*?)(?:<!---.*?-->)?(?!(<!---.*?-->).*?)(?:#####|$) 

をしかし、動作するようには思えません。

A link to pythex for help.

答えて

1

あなたは先読みして、この正規表現を使用することができます。

(?:#####\s*issue type.*\s+)(?:<!---.*?-->\s+)?([\s\S]*?)(?=\s*(?:#####|$)) 

RegEx Demo

(?=\s*(?:#####|$))我々は先に、現在位置の#####または行の終わりを持って断言先読みです。これは、指定された入力内の複数の一致を照合するのに役立ちます。

コード:解決や改善のためのanubhava

>>> reg = re.compile(r'(?:#####\s*issue type.*\s+)(?:<!---.*?-->\s+)?([\s\S]*?)(?=\s*(?:#####|$))', re.I) 
>>> print(reg.findall(test_str)) 
['- Problem/Case\n- Requirement', '- Problem/Case\n- Requirement'] 
+1

感謝。 pythexのウェブサイトは全く異なる結果をもたらしていると思われ、私も混乱していました。だから、主な問題は、改行と一致しなかった私の第3グループでドット(。)を使用していたことで、結果が得られなかったのです。 –

+1

はい、そうです。また、正規表現全体に対してDOTALLを有効にする必要はありません。必要に応じて、 '[\ s \ S]'を使って改行を含む文字にマッチさせることができます。 – anubhava

関連する問題