正则表达式不匹配时的故障排除?

时间:2012-03-29 15:07:25

标签: c# regex

如果regex.Matches与任何内容都不匹配并尝试返回matches.group[]

,是否有办法处理异常

我有一个HTML div中10张专辑的列表。每张专辑都有5个属性,例如album cover pathalbum linkalbum name等。 我在函数中使用regex matchcollection进行了HTML解析,并为每个属性调用了此函数。

Regex regex = new Regex(pattern, RegexOptions.Compiled);
MatchCollection mc = regex.Matches(source);
string icerik = mc[0].Groups[group].Captures[0].Value;

我得到一个清晰的清单:

  • 图片路径:http...
  • 相册名称:...

如果这些部分存在于html中,则没有问题。但问题是,如果,例如,html中没有提供第二张专辑的图像路径怎么办?在这种情况下,没有匹配发生,mc[0].Groups[group].Captures[0].Value导致超出边界的异常。

在发生此错误之前,我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用LINQ to Objects中的Any()运算符。这需要System.Linq库(.NET 4.0的一部分):

if (mc[0].Groups[group].Captures.Any())
{
   ...
}

这将告诉您Captures集合是否包含任何元素。如果没有,那么当然你不能采用元素[0] ......

答案 1 :(得分:0)

这应该这样做。

if (mc.Count > 0 &&
    mc[0].Groups.Count > group && 
    mc[0].Groups[group].Captures.Count > 0)