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

Regex 如何使用正则表达式捕获多个模式?,regex,regex-lookarounds,regex-group,regex-greedy,Regex,Regex Lookarounds,Regex Group,Regex Greedy,我有几个文本文件,包含错误值。每个文件中的值都不同,因此我无法获得值所在的精确行 示例如下: v1 = 1111 v2 = A:10 B:2 ((\d{2}[.]\d{2}[.]\d{2}),(\d{2}[:]\d{2}[:]\d{2},\d*\s*(('+v1+')[,].*|\S*\s('+v2+')).*)) 正文: (希望捕获v1) 正则表达式如下: v1 = 1111 v2 = A:10 B:2 ((\d{2}[.]\d{2}[.]\d{2}),(\d{2}[:]\d{2}[:]

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

示例如下:

v1 = 1111
v2 = A:10 B:2
((\d{2}[.]\d{2}[.]\d{2}),(\d{2}[:]\d{2}[:]\d{2},\d*\s*(('+v1+')[,].*|\S*\s('+v2+')).*))
正文:

(希望捕获v1)

正则表达式如下:

v1 = 1111
v2 = A:10 B:2
((\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:10b:
      格式
  • 关闭组

这里的逻辑是什么?第一个字符串中有
v1
,但第二个字符串中没有
v2
。第一个字符串中没有
1111
,但第二个字符串中有
A:10b:2
。@第四只鸟我编辑了文本。在第一个示例中,我需要从文本中获取1111。这已经在正则表达式中了。我也可以单独为A:10B:2做这些。我希望有一个可以同时执行这两项任务的正则表达式。请尝试捕获组
\d{2}\.\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)
⚠️ 那么
183769
中的
1837
是有效捕获吗?