如何在regex中的一个位置使用捕获的命名组,以便在regex中的不同位置使用,从而将相同的模式与相同的命名组匹配

如何在regex中的一个位置使用捕获的命名组,以便在regex中的不同位置使用,从而将相同的模式与相同的命名组匹配,regex,Regex,下面是我的正则表达式,它完全按照需要捕获第二个日志模式,在第一个模式中,它捕获的最多是PID,之后必须使用与“Message”相同的命名组捕获内容 如何使用在一个地方定义的捕获命名组在regex中的另一个地方使用它 (?P<timestamp>\w+\s\d+\s\d+:\d+:\d+)\s(?P<host>\w+)\s(?P<process>\w+\/\w+|\w+)\[(?P<process_id>\d+)\]\W+|(?P<messag

下面是我的正则表达式,它完全按照需要捕获第二个日志模式,在第一个模式中,它捕获的最多是PID,之后必须使用与“Message”相同的命名组捕获内容

如何使用在一个地方定义的捕获命名组在regex中的另一个地方使用它

(?P<timestamp>\w+\s\d+\s\d+:\d+:\d+)\s(?P<host>\w+)\s(?P<process>\w+\/\w+|\w+)\[(?P<process_id>\d+)\]\W+|(?P<message_id>\d+[a-zA-Z0-9]+).+:(?P<message>.*)

在模式中,可以省略最后一个或
|
,因为要匹配的部分是同一字符串的一部分

如果组
消息
始终存在,并且
消息\u id
是可选的:

(?P<timestamp>\w+\s\d+\s\d+:\d+:\d+)\s(?P<host>\w+)\s(?P<process>\w+\/\w+|\w+)\[(?P<process_id>\d+)\]\W+(?P<message_id>\d+[a-zA-Z0-9]+)?.+:(?P<message>.*)
(?P\w++\s\d++\s\d+:\d+:\d+)\s(?P\w+)\s(?P\w++/\w++\w++\[(?P\d+)\]\w+(?P\d+[a-zA-Z0-9]+)。+:(?P.*)
  • (?P\w+\s\d+\s\d+:\d+:\d+)\s
    匹配时间戳格式和空格字符
  • (?P\w+)\s
    匹配单词字符和空格字符
  • (?P\w+\/\w+\w+
    匹配字字符,也可以选择
    /
    和字字符
  • \[(?P\d+)\]\W+
    匹配
    []
    之间的1+个数字,后跟非单词字符
  • (?P\d+[a-zA-Z0-9]+)?
    将此组设置为可选组
  • +:
    匹配到字符串末尾,回溯到最后出现的
  • (?P.*)
    匹配行的其余部分

参见
(?P<timestamp>\w+\s\d+\s\d+:\d+:\d+)\s(?P<host>\w+)\s(?P<process>\w+\/\w+|\w+)\[(?P<process_id>\d+)\]\W+(?P<message_id>\d+[a-zA-Z0-9]+)?.+:(?P<message>.*)