需要Regex上的一个块是可选的

时间:2015-12-03 05:50:33

标签: c# regex

我有这个正则表达式 - “\ ^ CV _(\ w +)? - (\ w +)? - Base”

var matches = new Regex(@"\^CV_(\w+)?-(\w+)?-Base").Matches("EnglUS^CV_Common-Concierge-Base^0^0^0");
var matchGroups = matches[0].Groups;
var parentCatMatch = matchGroups[1].Value;
var childCatMatch = matchGroups[2].Value;

我为上面的值获得了正确的正则表达式匹配和组,但我得到以下一个的例外 -

**Exception:** Specified argument was out of the range of valid values. Parameter name: i 

var matches = new Regex(@"\^CV_(\w+)?-(\w+)?-Base").Matches("EnglUS^CV_Common-Base^0^0^0");
var matchGroups = matches[0].Groups;
var parentCatMatch = matchGroups[1].Value;
var childCatMatch = matchGroups[2].Value;

问题:我应该在正则表达式中更改第二个单词块 - “Concierge”从此单词变为可选 - “EnglUS^CV_Common-Concierge-Base^0^0^0

我在网上搜索了这个,但没有得到它的工作,我在正则表达式中的一些变化甚至停止了总匹配,所以如果有更多专业知识的人可以提供帮助,我会在这里发帖。

2 个答案:

答案 0 :(得分:3)

\^CV_(\w+)?(?:-(\w+))?-Base

             ^^

只需将-放在optional group内。请参阅演示。

https://regex101.com/r/hE4jH0/27

答案 1 :(得分:1)

HEAP

这确保了CV_之后的每个组都是(\ w)后跟( - )的形式。并且{1,2}告诉表达式它需要最少1和最多2。