我正在尝试使用一个reg ex来匹配表示optgroup和option标签的字符串。目的是建立一个匹配层次结构,可用于构建散列,其中每个键表示一个optgroup值,每个值都是一个选项数组。
字符串如下所示:
group: group1
option1
option2
option3
group: group2
option1
option2
option3
我得到了这个注册表:
/(?<=group:\s)(([^\n]+(?))([\S\s]*?)(?=group:\s|\z))/gm
首先匹配每个group
,即两个group:
字符串之间的所有内容。第一个group:
但不包括第二个group1
。然后它将子组作为optgroup的名称进行匹配。在这种情况下{{1}}。
但我似乎无法想出一个可以单独匹配以下每一行的模式。
答案 0 :(得分:1)
这很有趣,但我不认为正则表达式可以处理这个问题。这些组代表字符串,而不是列表。如果一个组包含在多次匹配的模式的一部分中,则返回最后一个匹配。
所以即使你写得正确(demo):
(?<=group:\s)(.*)((?:\n)(?!group:).*)*
捕获组将包含:
('group1', 'option3')
您可以使用两个正则表达式,一个用于匹配整个组,而ont用于匹配行,或者如果模式非常简单,请使用与整个组匹配的正则表达式,然后拆分行。