我有一个字符串(日志文件),我想提取两个字符串(多个实例)之间的所有文本。
这是我的文字:
++ PLANNING ITERATIONS of DEMAND 337 ++
=========================================
Demand: 337 Event: 1189.001 Object/State: 7058/0 Tier: 0 Start: 1608130700 Duration: 90 At: 19-7-2016 16:19:36
Demand: 337 Event: 1190.001 Object/State: 7059/0 Tier: 0 Start: 1608130830 Duration: 330 At: 19-7-2016 16:19:36
Demand: 337 Event: 1191.001 Object/State: 7060/0 Tier: 0 Start: 1608140000 Duration: 360 At: 19-7-2016 16:19:36
++ EVENT PLAN of DEMAND 337 ++
===============================
event_time(1242.001,1,1609070800,1609071430)
event_time(1241.001,1,1609060800,1609061430)
event_time(1240.001,1,1609050800,1609051430)
++ PLANNING ITERATIONS of DEMAND 174 ++
=========================================
Demand: 174 Event: 212.001 Object/State: 6948/0 Tier: 0 Start: 1609010800 Duration: 390 At: 19-7-2016 16:19:38
Demand: 174 Event: 213.001 Object/State: 6949/0 Tier: 0 Start: 1609020800 Duration: 390 At: 19-7-2016 16:19:38
++ EVENT PLAN of DEMAND 174 ++
===============================
event_time(213.001,1,1609020800,1609021430)
event_time(212.001,1,1609010800,1609011430)
我想让每件事之间
++ PLANNING ITERATIONS of DEMAND 337 ++
=========================================
和
++ EVENT PLAN of DEMAND 174 ++
===============================
我期望得到的结果是:
Demand: 337 Event: 1189.001 Object/State: 7058/0 Tier: 0 Start: 1608130700 Duration: 90 At: 19-7-2016 16:19:36
Demand: 337 Event: 1190.001 Object/State: 7059/0 Tier: 0 Start: 1608130830 Duration: 330 At: 19-7-2016 16:19:36
Demand: 337 Event: 1191.001 Object/State: 7060/0 Tier: 0 Start: 1608140000 Duration: 360 At: 19-7-2016 16:19:36
Demand: 174 Event: 212.001 Object/State: 6948/0 Tier: 0 Start: 1609010800 Duration: 390 At: 19-7-2016 16:19:38
Demand: 174 Event: 213.001 Object/State: 6949/0 Tier: 0 Start: 1609020800 Duration: 390 At: 19-7-2016 16:19:38
我试图自己解决它,但直到现在为止,但它会返回第一个匹配项,直到文本结尾。
这是我使用的正则表达式:
Demand:(?s)(.*)[+][+]
我认为最好的方法就是找到所有的Demand: ...
线条。
您可以使用以下正则表达式执行此操作:
(?m)Demand:\s+.*$
此正则表达式查找所需类型的一行。您需要使用所使用的语言/库中的任何一种功能来搜索与文本中与该正则表达式匹配的所有字符串。
在(?m)
一开始设定m
选项,代表多,因此$
将匹配行的末尾,而不是整个TXT结束。
之后,正则表达式非常简单。它先搜索,Demmand:
然后至少搜索一个空格,然后搜索所有内容,直到行尾为止。默认情况下,正则表达式不会跨行扩展.
搜索,因此仅限于它扫描的行。但是,如果将其扩展(例如,通过s
在前面的括号内使用该选项),则必须将正则表达式更新为(?m)Demand:\s+.*?$
-即添加?
符号以使搜索进行到行首不贪婪为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句