使用RegEx拆分Url

本文关键字:Url 拆分 RegEx 使用 | 更新日期: 2023-09-27 18:23:49

我想使用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。我找不出那是怎么回事。有人能帮我吗?

使用RegEx拆分Url

有些人在遇到问题时会想"我知道,我会用正则表达式。"现在他们有两个问题--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中搜索所需目录的索引。

这只能意味着

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

不等于你提供的价值。试着调试代码,找出变量imgurl 的确切值

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

问题是你的url中不包含"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];
}

在您的网格中,url中可能有没有small/的图像,因此最好添加以下条件

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

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

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