1

ここにも同様の質問があります。その質問では、Xはたまたまであり(、Yはたまたま)でした。私はのようなものを探しています

   public string GetStringBetweenStrings(string Source, string leftString, string rightString)
   {

       // implementation 
      Return middlePart;
   }

そのため、そのメソッドを次のように呼び出すと、

   var test = GetStringBetweenStrings("Hello World this is a test","World","test");

   // then test = " this is a ";

どうすればその関数を構築できますか

4

4 に答える 4

2

同じリンクされた質問で、ここで変更された、すべての文字列に対して機能するより柔軟な回答があります。

public string GetStringBetweenStrings(string source, string leftString, string rightString)
{
    int start = source.IndexOf(leftString); // assume != -1
    int end = source.IndexOf(rightString);  // assume != -1 and >= start
    if (start == -1 || end == -1 || end < start) return String.Empty;
    return source.Substring(start + leftString.Length, end - start - rightString.Length - 1)
}

これは、両方の文字列がソース文字列に含まれていることを前提としています。どちらかがそうでない場合、どのような動作が必要ですか?または、開始が終了後の場合はどうなりますか?

@Jackによる必須の正規表現バージョンですが、機能に更新されています:

public string GetStringBetweenStrings(string source, string leftString, string rightString)
{
    return Regex.Match(source, String.Format(@"(?<={0})(.*)(?={1})", 
                       Regex.Escape(leftString),
                       Regex.Escape(rightString)))
                       .Captures[0].Value;
}
于 2012-04-26T21:38:08.100 に答える
1
(?<=World).*(?=test)

http://regexr.com?30ph4

これが正規表現ソリューションです。正規表現パターンを構築するときに、文字列変数でWorldandを置き換えます。test

于 2012-04-26T21:41:20.853 に答える
0

IndexOf関数を使用して、2つの文字列を見つけます。次に、SubStringを使用して必要なものを抽出します。

于 2012-04-26T21:37:39.250 に答える
0

IndexOf最も簡単です。最初の文字列を過ぎて開始をオフセットしていることを確認してください。また、左/右が重なる可能性がある場合に処理する (テストされていない) コードを追加しました。

public string GetStringBetweenStrings(string Source, string leftString, string rightString)
{
   var left = Source.IndexOf(leftString);
   var right = Source.IndexOf(rightString);
   while (right > -1 && left + leftString.Length >= right)
   {
       right = Source.IndexOf(rightString, right + 1);
   }
   if (left > -1 || right > -1 || left < right)
       return null;
   var start = left + leftString.Length;
   var end = right;
   return Source.Substring(start, end - start);
}
于 2012-04-26T21:52:37.170 に答える