这是一个示例文本文件,我想从“最终输出”中捕获文本,直到第一次出现“DEBUG”
DEBUG: Fri Dec 7 06:49:14 2018:16920 final output is [ abc
1243 -/$> li
text te5%1][
;
done
DEBUG:
预期产量:
[ abc
1243 -/$> li
text te5%1][
;
done
我的正则表达式:
DEBUG.*final output is ([a-z \n]*)DEBUG
这仅适用于字母,但输出是字母,字母,数字的组合 . 有没有办法继续捕获,直到第一次出现DEBUG
3 回答
使用
Lookbehind
&Lookahead
Ex:
Output:
你的正则表达式不起作用的原因是因为character class不包含字符串中的所有字符 .
您可以将角色类更新为
[][/$%>;a-z0-9 \n-]
. 你的正则表达式看起来像:您的比赛是在第一个捕捉组中 .
如果你想使用点匹配任何字符而不是包含换行符的字符类,你可以使用标志
re.DOTALL
(demo)和这个正则表达式:例如:
见regex demo&Python demo
你可以试试这个
Explanation
^
- 锚定字符串的开头 .(?:DEBUG.*?)
- 非捕获组 . 匹配DEBUG后跟任何零或更多时间,除了新行(延迟模式) .(?<=final output is)
- 正向后卫匹配final output is
.[\w\W]+
- 一次或多次匹配任何角色 .(?=DEBUG)
- 积极的lokkahead . 赛事DEBUG
Demo