我正在解析文件并试图提取文件中的多个部分。其中一个部分称为“报告”,单个文件可能包含多个报告。我想提取其中的每一个'报告'使用正则表达式从文件中的部分。
正面临的问题:
有多个部分以' -----'结尾,如何在第一次出现时停止?
当前正则表达式:
-+(\s+)?Report(\s+)?-+\n(.*\n)+\n-{72}
不幸的是,这个正则表达式将所有部分都作为一个部分进行匹配,而我打算在第一次出现时将其停止为“' ----”部分结束模式。
示例文件:
-----------报告-----------
Lorem ipsum dolor坐下来,精神上的adipistur elit。在eo M. Si longus,levis; Ita prorsus,inquam; Tu quidem reddes;比率quidem vestra sic cogit。 Duo Reges:建设相互联系。 Tum Torquatus:Prorsus,inquit,assentior
------------------------------
Putabam equidem满意,inquit,我dixisse。 Dicimus aliquem hilare vivere; Quonam,inquit,modo? Nescio quo modo praetervolavit oratio。
-----------报告-----------
在eo M. Sed quae tandem ista ratio est? Quoniam,si dis placet,ab Epicuro loqui discimus。 Venit ad极值;非连续的,非常无情的。
------------------------------
Illi enim inter se dissentiunt。 Equidem e Cn。在multis malis affectus。 Hoc loco tenere se Triarius non potuit。 Haec dicuntur inconstantissime。 Efficiens dici potest。
-----------分析-----------
Ato in eo M. Sed quae tandem ista ratio est? Quoniam,si dis placet,ab Epicuro loqui discimus。 Venit ad极值;非连续的,非常的。
----------------------------
注意:
答案 0 :(得分:2)
您可以使用
(?s)-+\s*Report\s*-+\n(.*?)\n-{72}
或者 - 因为---Report----
从行的开头开始:
(?sm)^-+\s*Report\s*-+\n(.*?)\n-{72}
请参阅regex demo
<强>详情:
(?s)
- 启用DOTALL模式-+
- 1+连字符\s*
- 0+ whitespaces Report
- 文字字符的子字符串\s*
- 0+ whitespaces -+
- 1+连字符\n
- 换行符(.*?)
- 捕捉第1组匹配任何0+字符,但尽可能少,直到第一个... \n-{72}
- 换行后跟72个连字符。与re.findall
一起使用。