所以我最近一直在学习正则表达式,看来我的新表达方式遇到了障碍。我需要能够选择括号中的所有文本并将它们设置为不同的组。我的表达做了两对中的一对,但我怎么做多个?环视四周?我还想选择“:”之后的语句到行尾,我不知道为什么这不起作用。解释会很棒!
示例在这里: https://regex101.com/r/uV2mD3/2
([\d]{4}-[\d]{2}-[\d]{2}\s[\d]{2}:[\d]{2}:[\d]{2},[\d]{3}).+(\b[A-Z]{2,}\b).*\[(\S+)\](?:\s\:\s).+(?=\n|$)
第一组选择日期/时间格式,第二组选择“DEBUG”或“LOG”,第三组和第四组应该是括号([])中的任何内容,第五组选择在“:”之后的任何内容
答案 0 :(得分:3)
为了更好的可读性,您可以使用允许您编写多行正则表达式的x
选项:
https://regex101.com/r/uV2mD3/3
(?x) # X option
(
[\d]{4}-[\d]{2}-[\d]{2}\s* # Date
[\d]{2}:[\d]{2}:[\d]{2} # Hour
,[\d]{3} # Number
)
\s+
(\w+) # Tag (DEBUG)
\s+ # Some spacing
\[(.*?)\]\s* # First tag
\[(.*?)\] # Second tag
\s*:\s*
(.*) # Last string
如果知道[.*]
的数量,您只需在正则表达式中为所有组重复该模式。
如果[...]
的数量是可变的,那么这将是一个更复杂的正则表达式。
您还可以使用(?P<name>)
命名捕获组,如下所示
(?x)
(?P<date>
[\d]{4}-[\d]{2}-[\d]{2}\s* # Date
[\d]{2}:[\d]{2}:[\d]{2} # Hour
,[\d]{3} # Number
)
\s+
(?P<tag>\w+) # Tag
\s+
\[(?P<group1>.*?)\]\s* # First tag
\[(?P<group2>.*?)\] # Second tag
\s*:\s*
(?P<last>.*) # Last string