用于解析文件块的正则表达式

时间:2018-01-30 13:34:48

标签: python regex

我有一个格式化的文件:

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,我可以通过正则表达式来完成。 或者我也可以使用替换功能。 请帮助。

1 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

BEGIN(?:(?!END)[\s\S])*EXCEPTION

Click for Demo

OR

(?<=BEGIN)(?:(?!END)[\s\S])*(?=EXCEPTION)

Click for Demo

解释(第一个正则表达式):

  • BEGIN - 匹配BEGIN
  • (?:(?!END)[\s\S])* - tempered greedy token匹配任何不以END开头的字符的出现次数
  • EXCEPTION - 匹配EXCEPTION