很抱歉问了这个可能重复的问题。我检查了有关 * 可选捕获组 * 的现有问题和答案。我尝试了一些方法,但无法将答案转换为我自己的示例。
这是两条输入线
id:target][label
id:target
我想捕获id:
(组1)、target
(组2),如果存在][
,则捕获label
(组3)。
使用的正则表达式(Python regex)只在第一行(live example on regex101)起作用。
^(.+:)(.*)\]\[(.*)
在其他的例子中,我不明白正则表达式是如何使捕获组可选的,也许我使用的分隔符][
也与我的理解问题混淆了。
我试过的一件事是
^(.+:)(.*)(\]\[(.*))?
这不符合预期
1条答案
按热度按时间watbbzwu1#
你可以在结尾使用一个锚点,在第1组使用一个取反的字符类,在第2组使用一个非贪婪的量词,然后选择匹配第3部分:
^
字符串开始([^:]+:)
组1,匹配除:
以外的1+个字符,然后使用求反字符类匹配:
(.*?)
组2,匹配任何字符,尽可能少(?:
非捕获组,以作为整个部件进行匹配]\[
匹配][
(.*)
组3,匹配任意字符)?
关闭非捕获组并将其设为可选$
字符串结束参见regex101 demo
如果您只匹配例如单词字符,则可以考虑:
查看另一个regex101 demo