我有这个文字
##### PRIORITY
- Priority 1
- Priority 2
##### ISSUE TYPE
<!--- comment -->
- Problem / Case
- Requirement
我试图根据标题(优先级,问题类型)仅每个类别的选项。
我的正则表达式是这样的:
(?:#####\s?issue type.*?)(?:<!---.*?-->)?(.*?)(?:#####|$)
我已将三个小组分开(标题,评论,内容)。
如果没有评论块,正则表达式应该正常工作,但如果有注释块,它会被我的第三个(内容)组捕获。如何从第三组中排除评论部分(如果存在)?
我尝试了这样的负面预测:
(?:#####\s?issue type.*?)(?:<!---.*?-->)?(?!(<!---.*?-->).*?)(?:#####|$)
但似乎不起作用。
答案 0 :(得分:1)
你可以使用这个正则表达式进行前瞻:
(?:#####\s*issue type.*\s+)(?:<!---.*?-->\s+)?([\s\S]*?)(?=\s*(?:#####|$))
(?=\s*(?:#####|$))
是一个先行者,断言我们在当前位置之前有#####
或行尾。这有助于您匹配给定输入中的多个匹配项。
<强>代码:强>
>>> 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']