提取两个正则表达式之间的字符串

西拉吉

我有一个字符串(日志文件),我想提取两个字符串(多个实例)之间的所有文本。

这是我的文字:

++ 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅提取两个正则表达式模式之间的字符串部分

正则表达式-提取两个表达式之间的字符串,仅获得最后的出现

正则表达式提取两个斜杠之间的字符串和其中的指定字符串

如何提取作为变量传递给awk的两个正则表达式之间的字符串?

R中的正则表达式提取两个匹配字符串之间的部分(非意图)

正则表达式获取两个%字符之间的字符串

正则表达式匹配两个特殊字符之间的字符串

正则表达式从字符串中提取两个带空格的数字

使用正则表达式提取前两个引号内的字符串?

正则表达式:提取两个字符/字符串之间的字符串

正则表达式捕获两个不同标头之间的字符串

正则表达式以检查+,-或*是否在字符串中的两个单词之间

正则表达式在两个匹配项之间返回字符串

删除两个正则表达式模式之间的字符串

正则表达式查找包含在两个括号之间的字符串

使用正则表达式提取两个字符串之间的字符串

正则表达式:在两个不匹配的字符串之间替换字符串

在两个标记字符串之间的字符串中查找/替换正则表达式模式

我如何使用正则表达式获取两个特定字符串之间的字符串?

正则表达式匹配两个相同字符串之间的所有字符串

正则表达式在两个字符串(它们是变量)之间提取

正则表达式提取Javascript中两个字符串之间的行

正则表达式:使用多行sed提取两个字符串之间的内容

PHP:使用正则表达式提取两个字符串之间的数字

正则表达式仅在两个字符串之间提取数字

正则表达式从选择的不同字符中匹配两个相同字符之间的字符串

在正则表达式中需要帮助,两个正则表达式之间的子字符串

正则表达式在两个特殊已知字符之间查找字符串

如何使用正则表达式在两个特殊字符之间查找特定字符串?