我在C#中使用正则表达式来提取网址的一部分,但是如果网址没有" www"然后它会更改分组计数,因此我无法始终转到match.Groups[3].Value
以获取我的价值。我的正则表达式是
Regex r1 = new Regex(@"(http[s]?://)([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*");
你能否让第2组永远存在,这样就不会破坏计数?
答案 0 :(得分:1)
使用可选的被动(非捕获)组(即:'(?:www。)?'):
Regex r1 = new Regex(@"(http[s]?://)(?:www\.)?([A-Za-z0-9\-]+)(\.([A-Za-z0-9\-]+))*");
'www。'的存在(或不存在)然后不会考虑到分组计数。
答案 1 :(得分:0)
对不起,在回答之前应该仔细阅读这个问题。 :)
如果您为组命名,那么您应该能够按名称对它们进行索引,并检查每个组的“成功”属性,以查看实际匹配的元素。
当然,对于某些正则表达式,除非所有捕获组都匹配,否则整个事情根本不匹配。这取决于正则表达式。