【发布时间】:2021-09-07 11:18:30
【问题描述】:
使用 Go 的正则表达式,我试图从原始文本中提取一组预定义的有序键值(多行)对,其最后一个元素可能是可选的,例如,
Key1:
SomeValue1
MoreValue1
Key2:
SomeValue2
MoreValue2
OptionalKey3:
SomeValue3
MoreValue3
(这里,我想将所有值提取为命名组)
如果我使用默认的贪婪模式(?s:Key1:\n(?P<Key1>.*)Key2:\n(?P<Key2>.*)(?:OptionalKey3:\n(?P<OptionalKey3>.*))?),它永远不会看到 OptionalKey3 并将其余文本匹配为 Key2。
如果我使用非贪婪模式(?s:Key1:\n(?P<Key1>.*)Key2:\n(?P<Key2>.*?)(?:OptionalKey3:\n(?P<OptionalKey3>.*))?),它甚至看不到 SomeValue2 并立即停止:https://regex101.com/r/QE2g3o/1
有没有一种方法可以选择性地匹配 OptionalKey3,同时还能捕获所有其他的?
【问题讨论】: