1

我有一个输入字符串,其数据采用以下格式:

  • “http://testing/site/name/lists/tasks”
  • “http://testing/site/name1/lists/tasks”
  • “http://testing/site/name2/lists/tasks”等,

如何从该字符串中仅提取名称、名称 1、名称 2 等?

这是我尝试过的:

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

它抛出异常,说明StartIndex不能大于字符串中的字符数。我的表达有什么问题?我该如何解决?谢谢。

4

4 回答 4

4

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

但是以下也将基于所有 url 的模式相似的假设

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

另一种选择是使用 Uri

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

然后根据您的要求分解 uri 部分

于 2013-01-16T15:09:40.040 回答
1

这是正则表达式的工作:

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
  }
}
于 2013-01-16T15:09:46.707 回答
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();

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

于 2013-01-16T15:19:46.380 回答
0

因为Substring具有单个参数的函数采用起始字符的索引并将所有内容消耗到字符串的末尾。这有点幼稚,但你可以从第19 个字符开始:Url.Substring(19);

于 2013-01-16T15:08:57.857 回答