Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提取字符串X和字符串Y之间的字符串_C#_Regex - Fatal编程技术网

C# 提取字符串X和字符串Y之间的字符串

C# 提取字符串X和字符串Y之间的字符串,c#,regex,C#,Regex,这方面也有类似的问题。在那个问题中,X碰巧是(和Y碰巧是)。我在找像这样的东西 public string GetStringBetweenStrings(string Source, string leftString, string rightString) { // implementation Return middlePart; } 因此,当我将该方法称为: var test = GetStringBetweenStrings("

这方面也有类似的问题。在那个问题中,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 ";

如何构建该函数

使用IndexOf函数定位两个字符串。然后使用子字符串提取所需内容。

在同一链接问题中,您有一个更灵活的答案,适用于所有字符串,修改如下:

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)
}
public string getstringbetween字符串(字符串源、字符串leftString、字符串rightString)
{
int start=source.IndexOf(leftString);//假设!=-1
int end=source.IndexOf(rightString);//假设!=-1和>=start
if(start==-1 | | end==-1 | | end
这假设两个字符串都包含在源字符串中。如果其中一个不是,你想要什么样的行为?或者如果开始在结束之后

根据@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;
}
public string getstringbetween字符串(字符串源、字符串leftString、字符串rightString)
{

return Regex.Match(source,String.Format)(@“(?
(?
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);
}
public string getstringbetween字符串(字符串源、字符串leftString、字符串rightString)
{
var left=Source.IndexOf(leftString);
var right=Source.IndexOf(rightString);
while(right>-1&&left+leftString.Length>=right)
{
right=Source.IndexOf(rightString,right+1);
}
如果(左>-1 | |右>-1 | |左<右)
返回null;
var start=left+leftString.Length;
var端=右端;
返回Source.Substring(start,end-start);
}

GetStringBetweenStings(“Hello World World这是一个测试”,“World”,“test”);它应该返回什么?您需要将leftString的长度添加到开始处,否则子字符串将包含leftString。对于正则表达式版本,您可能希望使用。*?,因为当前表达式将匹配“a或b”或(c或d)”from:“(a或b)或(c或d)”。而不是“a或b”和“c或d”。哦,对于regex版本,不要忘记在边界词上调用regex.Escape。
regex.Escape
功能很好,已经更新。但是另一个示例取决于原始用户想要什么。他想要贪婪还是不想要?他想要所有匹配项,还是第一个,还是最后一个?
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);
}