我有一个格式化的文件:
BEGIN
xxx
END;
BEGIN
xxx
EXCEPTION
xxx
END;
BEGIN
xxx
EXCEPTION
xxx
END;
我需要的只是BEGIN和EXCEPTION块之间的数据,并忽略BEGIN-END和EXCEPTION-END块。我创建了一个正则表达式,但它没有给我所需的输出:
body=re.findall(r'BEGIN.*^[^BEGIN].*EXCEPTION', data, re.MULTILINE|re.DOTALL)
另外我想从输出中删除BEGIN和EXCEPTION,我可以通过正则表达式来完成。 或者我也可以使用替换功能。 请帮助。
答案 0 :(得分:3)
试试这个正则表达式:
BEGIN(?:(?!END)[\s\S])*EXCEPTION
OR
(?<=BEGIN)(?:(?!END)[\s\S])*(?=EXCEPTION)
解释(第一个正则表达式):
BEGIN
- 匹配BEGIN
(?:(?!END)[\s\S])*
- tempered greedy token匹配任何不以END
开头的字符的出现次数EXCEPTION
- 匹配EXCEPTION