2013-01-16 189 views
1

我有数据在下面的格式来输入字符串:字符串操作

  • 的 “http://测试/网站/名/列表/任务”
  • 的“http://测试/网站/名1 /列表/任务”
  • 的 “http://测试/网站/名2 /列表/任务” 等,

我怎么能只提取名,1,名称等。从这个字符串?

这是我曾尝试:

SiteName = (Url.Substring("http://testing/site/".Length)).Substring(Url.Length-12) 

它抛出一个异常,说明StartIndex不能超过字符串中的字符的数量。我的表情有什么问题?我该如何解决它?谢谢。

+0

我是否正确地对您的问题进行了格式化?你的字符串是“http:// testing/site/name/lists/tasks”,“http:// testing/site/name1/lists/tasks”,“http:// testing/site/name2/lists/tasks “'或者这些是3种不同的字符串? –

+0

一般来说,如果你很难编码任何东西到'12',你会有一段糟糕的时间。 –

+0

如果格式是固定的,那么尝试类似Url.SubString(20,(Url.IndexOf(“/”) - 1))会给你想要的结果。请参阅http://www.dotnetperls.com/indexof – 2013-01-16 15:15:49

回答

4

一个更好的选择将是使用正则表达式匹配/替换

但是下面也将工作基础上,假设所有的网址将被图案相似

var value = Url.Replace(@"http://testing/site/", "").Replace(@"/lists/tasks", ""); 

另一种选择将是使用乌里

var uriAddress = new Uri(@"http://testing/site/name/lists/tasks"); 

然后根据您的要求

0

因为具有单个参数的Substring函数采用的索引开始 charachter并将所有消耗到字符串的末尾。这将是一个有点天真,但你可以在charachter 开始:Url.Substring(19);

1

打破URI部分这是正则表达式工作:

string strRegex = @"http://testing/site/(.+)/lists/tasks"; 
RegexOptions myRegexOptions = RegexOptions.IgnoreCase; 
Regex myRegex = new Regex(strRegex, myRegexOptions); 
string strTargetString = @"http://testing/site/name/lists/tasks" + "\r\n" + @"http://testing/site/name1/lists/tasks" + "\r\n" + @"http://testing/site/name2/lists/tasks" + "\r\n" + @"http://testing/site/name3/lists/tasks"; 

foreach (Match myMatch in myRegex.Matches(strTargetString)) 
{ 
    if (myMatch.Success) 
    { 
    // Add your code here. Reference to first group 
    } 
} 
1

您也可以使用Uri类来获得所需的部分:

string[] urlString = urlText.Split(); 
Uri uri = default(Uri); 
List<string> names = urlString 
    .Where(u => Uri.TryCreate(u, UriKind.Absolute, out uri)) 
    .Select(u => uri.Segments.FirstOrDefault(s => s.StartsWith("name", StringComparison.OrdinalIgnoreCase))) 
    .ToList(); 

假设该部分始终以“名称”开头。