regex - 你如何匹配多行上的重复值?
问题描述
我正在尝试将多行与重复值匹配。如果有多个匹配项,我的脚本将继续。我一直在浏览反向引用文档,但我似乎无法根据我的情况进行处理。
这个想法是查询包含时间戳和操作的日志文件。我想将日志文件中包含重复时间戳的任何行与该行中包含的“开始”字符串进行匹配。
使用这种模式:
^(\b\d+)-(\d{2})-(\d{2}) (\d+):(\d{2})(?=\b[\s\S]*Starting\b)(?=[\s\S]*\b\1\b)
我希望匹配前两行,仅仅是因为时间戳完全相同。
2019-10-31 05:49:52.416 +10:00 [1] - Starting
2019-10-31 05:49:53.416 +10:00 [1] - Starting
2019-10-31 06:53:58.416 +10:00 [1] - Starting
目前,它只捕获第一行(1 个匹配项)。如何让它匹配多行上的重复值?
编辑:
为了澄清起见,我的模式正在寻找 YYYY-MM-DD HH:MM 的重复值。
解决方案
您可以通过捕获您认为在以下所有行中相同的时间戳部分来使用反向引用Starting
,您还可以在第二个捕获组中捕获该部分。
然后,您可以重复匹配以与第 1 组相同的值开头并在该行中包含第 2 组的所有行。
^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}).*(\bStarting\b)(?:\R\1.+\2)+
^
线路开始(
捕获组 1\d{4}-\d{2}-\d{2} \d{2}:\d{2}
匹配您要捕获的时间戳格式
)
关闭组.+
匹配除换行符以外的任何字符 1 次以上(
捕获组 2\bStarting\b
在单词边界之间匹配开始
)
关闭组(?:
非捕获组\R\1.+\2
匹配 Unicode 换行序列,对第 1 组中捕获的内容的反向引用,除换行符之外的任何字符的 1+ 倍,以及对第 2 组中捕获的内容的反向引用
)+
关闭非捕获组并重复 1 次以上以匹配至少 2 行
推荐阅读
- visual-studio-code - 为什么 stylelint vscode 扩展在我的电脑上不起作用?
- python - Flask 动态路由采用我未指定的值
- c - C中的堆栈与程序变量地址
- python - 如何在 DataFrame 中根据其特征重要性映射特征?
- python-3.x - python Tensorflow 2.4.0'输入必须是4维[1,1,371,300,3]'错误
- mongoose - 如何根据 mongoose 中嵌套 JSON 文档中数组字段的日志日期获取最新日志记录
- android - 如何从父级及其子级的 Firebase 中获取随机数据
- mysql - 如何每年重置表中的 MySQL 列?
- git - 如何删除未使用“git rebase”显示的提交?
- python - Python:Collatz 序列——找到一个长度大于起始数字的数字