【发布时间】:2017-08-11 09:25:04
【问题描述】:
我要解析一个字符串,格式为!info1!info2!,info2是可选的。
如果需要,我正在尝试使用正则表达式捕获info1 和info2。
我想出了以下模式:
!([^!]*?)!(.*?)!|!(.*?)!
它有效,但我对结果不满意:
!foo!bar! -> Group1: foo Group2:bar
!foo! -> Group3: foo
(https://regex101.com/r/D9d6YP/1)
在这两个表达式中,foo 的意思是一样的,之后要以同样的方式处理。我想在同一组中捕获它,无论是否有第二组。
我曾尝试使用命名捕获组,但似乎无法重复使用它们
!(?<info1>[^!]*?)!(?<info2>.*?)!|!(?<info1>.*?)!
失败并显示错误消息'a sub-pattern name must be unique.
有什么方法可以捕捉同一组中的不同模式?
【问题讨论】:
-
请提供一个不带可选部分的示例字符串。
-
您的 regex101 链接似乎暗示您正在使用 PCRE 模式?对吗?
-
不,它是 .NET,regex101 中的风格只是默认风格。
-
所以没有分支重置,但是stackoverflow.com/questions/5377782/…
标签: .net regex regex-group