.net正则表达式可选命名组

时间:2018-03-27 09:46:43

标签: .net regex regex-group

我想解析输入字符串,如下所示: client/02004C4F4F50/box/registration client/02004C4F4F50/box/data/flow

使用.NET正则表达式库。 clientbox始终相同,但其余内容可能不同。 我提出的是这个正则表达式:

^client/(?<id>.+?)/box/(?<type>.+)(/(?<value>.+)?)

我想要的是registrationdatatype组匹配,flow进入可选组value。 它应该是这样的:

Groupname | Input 1      | Input 2
---------------------------------------
       id | 02004C4F4F50 | 02004C4F4F50
     type | registration | data
    value | {empty}      | flow

但是使用我当前的解决方案,可选组(value)永远不会匹配。 也许有人有提示。

1 个答案:

答案 0 :(得分:1)

您可以使用[^/]+模式(除了/ char之外的任何1个字符)匹配子部分,并使编号的捕获组而不是value命名的捕获组可选,即{{ 1}} =&gt; (/(?<value>.+)?)(另外,您可以将捕获组变为非捕获组,或使用(?n) inline ExplicitCapture modifier使所有捕获组都表现为非捕获组。)

您可以使用

(?:/(?<value>.+))?

请参阅the regex demo

enter image description here