正则表达集团可能不存在

时间:2014-10-21 21:37:24

标签: c# regex

我在C#中使用正则表达式来提取网址的一部分,但是如果网址没有" www"然后它会更改分组计数,因此我无法始终转到match.Groups[3].Value以获取我的价值。我的正则表达式是

 Regex r1 = new Regex(@"(http[s]?://)([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*");

你能否让第2组永远存在,这样就不会破坏计数?

2 个答案:

答案 0 :(得分:1)

使用可选的被动(非捕获)组(即:'(?:www。)?'):

Regex r1 = new Regex(@"(http[s]?://)(?:www\.)?([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*");

'www。'的存在(或不存在)然后不会考虑到分组计数。

答案 1 :(得分:0)

对不起,在回答之前应该仔细阅读这个问题。 :)

如果您为组命名,那么您应该能够按名称对它们进行索引,并检查每个组的“成功”属性,以查看实际匹配的元素。

当然,对于某些正则表达式,除非所有捕获组都匹配,否则整个事情根本不匹配。这取决于正则表达式。