如何使用正则表达式捕获多个模式?

How to capture a multiple patterns using regex?

我有几个包含错误值的文本文件。每个文件中的值都不同,因此我无法获得值所在的确切行。

示例如下:

v1 = 1111
v2 = A:10 B:2

正文:

12.10.08,11:12:39,183769  1111,10352,003,12,11:12:39,183 Syntax-->12345

(想要捕获 v1)

01.01.02,06:10:56,243648  00488,00000,018,01,06:10:56,243 A:10 B:2--1212 (would like to capture v2)

正则表达式如下:

((\d{2}[.]\d{2}[.]\d{2}),(\d{2}[:]\d{2}[:]\d{2},\d*\s*(('+v1+')[,].*|\S*\s('+v2+')).*))

无论传递什么值,都应该通过文本获取值。如果存在 v1,则应提供完整的文本,如果存在 v2,则应提供完整的文本。 但是只有一个正则表达式。

您可能会使用:

\d{2}\.\d{2}\.\d{2},\d{2}:\d{2}:\d{2},\d{6}(?: \d{5}(?:,\d+)+:\d{2}:\d{2},\d+)? (\d{4}\b|[A-Z]:\d{2} [A-Z]:\d)

说明

  • \d{2}\.\d{2}\.\d{2},\d{2}:\d{2}:\d{2},\d{6}匹配首位格式
  • (?: \d{5}(?:,\d+)+:\d{2}:\d{2},\d+)? 可选择匹配以 5 位数字开头的部分,直到格式
  • ( 捕获组
    • \d{4}\b匹配4位数字
    • |
    • [A-Z]:\d{2} [A-Z]:\d 匹配 A:10 B: 格式
  • ) 关闭群组

Regex demo