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

这是一个正则表达式解决方案。构建正则表达式模式时,用您的字符串变量替换World和。test

于 2012-04-26T21:41:20.853 回答
0

使用 IndexOf 函数来定位这两个字符串。然后使用 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 回答