【发布时间】:2019-02-20 00:40:30
【问题描述】:
我正在尝试使用一个相当复杂的 REGEX 表达式(请参阅下面的 REGEX101 演示),我根据本网站专家创建的一个稍微修改了它。它解析日志事件的特定模式:
- 1EXE_IN1EXE_CO2CONTENT_ACCESS3CONTENT_ACCESS
这些日志序列将始终以随机选择的EXE_IN 或EXE_CO 事件开头,前面是序列号。这些选择可以是任意数量、任意顺序。在这种情况下,我们只有两个 EXE 事件,但这可能是 200。或者 1。注意有一个序列号,我们需要捕获它。
序列的第二部分始终是一系列以数字开头的CONTENT.ACCESS 事件。再次从 1 到无穷大。
以下演示显示了一个工作示例,并且可能比我更好地传达了这个概念:Demo 1
它很好地捕获了不同组中的完整匹配、序列号和事件。
我需要在模式中添加一个时间戳(在序列号之后,前面有下划线),然后解析这个事件日志,例如
- 1_11/08/2014 23:03EXE_IN1_11/08/2014 23:03EXE_CO2_12/08/2014 09:17CONTENT_ACCESS3_13/08/2014 09:17CONTENT_ACCESS
我还需要捕获时间戳。
我尝试调整正则表达式,结果好坏参半。请看这个演示:demo2
理想情况下,我希望在每个事件中都看到类似的内容:
Match n
Full match 266-308 `2_12/08/2014 09:17CONTENT_ACCESS`
Group 1. 266-267 `2`
Group 2. 268-284 `12/08/2014 09:17`
Group 3. 284-308 `CONTENT_ACCESS`
我希望你能帮助我。 REGEX101 pcre 测试就足够了(作为记录,我在 R 中使用了与 perl 兼容的 str_match_all_perl 函数)。
提前非常感谢。
【问题讨论】:
-
嗨@UnbearableLightness,感谢您的编辑。如果您遇到解决方案,请告诉我。干杯...
标签: r regex pcre capturing-group