2013-01-16 190 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(); 

假設該部分始終以「名稱」開頭。