0

我想使用 RegEx 将 url 分成两部分。我已将 xml 响应保存到数据表中,并使用 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];
}

我在我的数据表中保存了与字符串相同的 url。我找不到那有什么问题。谁能帮我解决这个问题?

4

5 回答 5

5

有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。——杰米·扎温斯基

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您想要的目录的索引。

于 2013-07-19T08:36:40.227 回答
1

它只能意味着

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

不等于您提供的值。尝试调试您的代码并找出您的变量的确切值imgurl

于 2013-07-19T08:36:21.867 回答
0

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

if(fimgurl.Length >1)
      String  simgurl = fimgurl[1];
于 2013-07-19T08:45:39.313 回答
0

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

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

如果您想要更多详细信息,您必须发布 ndt 的内容。

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

foreach (DataRow row in ndt.Rows)
            {
    string imgurl =row["image1"].ToString();
    Console.WriteLine(imgurl)
    String[] fimgurl = Regex.Split(imgurl, @"small/");
    String  simgurl = fimgurl[1];
}
于 2013-07-19T08:39:11.547 回答
0

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

string imgurl = row["ImagePath"].ToString();
于 2013-07-19T08:47:43.863 回答