如何用正则匹配除[36;1m与[0m间数字外的所有内容?
正则表达式提取日志中指定标记间的数字
问题描述
给定日志数据:
Key: [36;1m2848761038914979188[0m Partition: 0 Offset: 33443 Timestamp: 2022-09-27 15:57:57.693 -0400 EDT Key: [36;1m2039734487331374643[0m Partition: 0 Offset: 33444 Timestamp: 2022-09-27 17:26:31.477 -0400 EDT Key: [36;1m2868926969028805951[0m Partition: 0 Offset: 33445 Timestamp: 2022-09-27 17:41:31.473 -0400 EDT Key: [36;1m2936812472746641386[0m Partition: 0 Offset: 33446 Timestamp: 2022-09-27 18:02:23.803 -0400 EDT
需要删除除[36;1m和[0m之间数字外的所有内容,仅保留目标数字。原正则(^|\[)(?!36;1m)[^\[]*无法满足需求,求正确写法。
解决方案
方法一:两步替换(直观易操作)
适用于大多数文本编辑器(如VS Code、Notepad++):
提取目标数字
- 查找正则:
.*\[36;1m(\d+)\[0m.* - 替换为:
$1
此操作会将包含目标数字的行替换为对应的数字,其他行保持不变。
- 查找正则:
清理非数字行
- 查找正则:
^\D+$ - 替换为空字符串
此操作删除所有不包含数字的行,最终仅保留目标数字。
- 查找正则:
方法二:一步正则替换(高效)
开启编辑器的多行模式后,使用以下正则完成一次性替换:
- 查找正则:
^(?!Key:).*$\n?|Key:\s*\[36;1m|\[0m$ - 替换为空字符串
正则说明:
^(?!Key:).*$\n?:匹配并删除所有不以Key:开头的行(含行尾换行符)Key:\s*\[36;1m:匹配并删除Key:到[36;1m的前缀内容\[0m$:匹配并删除行尾的[0m标记
最终结果
替换完成后,得到的内容为:
2848761038914979188 2039734487331374643 2868926969028805951 2936812472746641386
内容的提问来源于stack exchange,提问作者Jwan622
相关产品推荐
相关产品推荐

