我想使用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。我找不到那个有什么问题。有人可以帮我这个吗?
答案 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();