使用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。我找不出那是怎么回事。有人能帮我吗?
有些人在遇到问题时会想"我知道,我会用正则表达式。"现在他们有两个问题--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();