1

次の形式のデータが入力される入力文字列があります。

  • "http://testing/site/name/lists/tasks"
  • "http://testing/site/name1/lists/tasks"
  • 「http://testing/site/name2/lists/tasks」など、

この文字列から name、name1、name2 などだけを抽出するにはどうすればよいですか?

これが私が試したことです:

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", "");

もう1つのオプションは、Uriを使用することです

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

次に、要件に応じて uri パーツを分解します

于 2013-01-16T15:09:40.040 に答える
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 に答える
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 に答える
0

単一のSubstring引数を持つ関数は、開始文字のインデックスを取得し、文字列の最後まですべてを消費するためです。少し単純ですが、文字19から開始できます。Url.Substring(19);

于 2013-01-16T15:08:57.857 に答える