使用RegEx拆分URL

时间:2013-07-19 08:30:39

标签: c# html asp.net regex

我想使用RegEx将网址拆分为两部分。我已将xml响应保存到datatable中,并使用foreach遍历每一行。当我使用regEx的数据表值时,只有0可用。当我使用数组索引1时,它会给出以下异常。

System.IndexOutOfRangeException: Index was outside the bounds of the array.

以下是给出和例外。

foreach (DataRow row in ndt.Rows)
{
    string imgurl =row["image1"].ToString();

    String[] fimgurl = Regex.Split(imgurl, @"small/");
    String  simgurl = fimgurl[1];
}

以下它没有任何问题。

foreach (DataRow row in ndt.Rows)
{
    //TextBox1.Text = row["ImagePath"].ToString();
    string imgurl ="http://www.hotelbeds.com/giata/small/12/124356/124356a_hb_w_001.jpg";
    String[] fimgurl = Regex.Split(imgurl, @"small/");
    String  simgurl = fimgurl[1];
}

我在My Datatable中保存了与字符串相同的url。我找不到那个有什么问题。有人可以帮我这个吗?

5 个答案:

答案 0 :(得分:4)

  

有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 --Jamie Zawinski

var uri = new Uri("http://www.hotelbeds.com/giata/small/12/124356/124356a_hb_w_001.jpg");

var firstPart = uri.Host + String.Concat(uri.Segments.Take(3));
  // returns: "www.hotelbeds.com/giata/small/"

var lastPart = String.Concat(uri.Segments.Skip(3));
  // returns: "12/124356/124356a_hb_w_001.jpg"

如果您需要http,则可以使用uri.Scheme。如果你想在不同的地方分开,显然只需将3更改为其他数字。

此外,您可以在uri.Segments中搜索更改时所需目录的索引。

答案 1 :(得分:1)

这只能意味着

string imgurl =row["image1"].ToString();

不等于你提供的价值。尝试调试代码并找出变量imgurl

的确切值

答案 2 :(得分:0)

我认为您的代码没有任何问题。

问题是你有一个不包含“small /”的网址。所以Split函数返回一个长度为1的数组,所以当你尝试访问索引1时你会有异常。

如果您想了解更多细节,则必须发布ndt的内容。

debuf的一种简单方法是将网址打印到控制台,以便您可以看到网址:

foreach (DataRow row in ndt.Rows)
            {
    string imgurl =row["image1"].ToString();
    Console.WriteLine(imgurl)
    String[] fimgurl = Regex.Split(imgurl, @"small/");
    String  simgurl = fimgurl[1];
}

答案 3 :(得分:0)

在您的网格中,网址中可能没有small/的图片,因此最好添加如下所示的条件

if(fimgurl.Length >1)
      String  simgurl = fimgurl[1];

答案 4 :(得分:0)

我认为你的列名有错误:
在第一个版本中,您使用image1列,在第二个版本中,您使用ImagePath(在评论中),也许您必须使用ImagePath列,如:

string imgurl = row["ImagePath"].ToString();