我必须解析一个字符串,格式为!info1!info2!,并且info2是可选的。
我正在尝试使用正则表达式来捕获,info1如果info2需要的话。
我想出了以下模式:
!([^!]*?)!(.*?)!|!(.*?)!
Run Code Online (Sandbox Code Playgroud)
它有效,但我对结果不满意:
!foo!bar! -> Group1: foo Group2:bar
!foo! -> Group3: foo
(https://regex101.com/r/D9d6YP/1)
Run Code Online (Sandbox Code Playgroud)
在这两种表达方式中,foo表示相同的事物,并且随后以相同的方式进行处理。我想将它捕获在同一组中,无论是否有第二组。
我尝试过使用命名捕获组,但似乎它们无法重复使用
!(?<info1>[^!]*?)!(?<info2>.*?)!|!(?<info1>.*?)!
Run Code Online (Sandbox Code Playgroud)
失败并显示错误消息“子模式名称必须是唯一的”。
有什么办法可以捕获同一组中的不同模式吗?