提取字符串,字符串X和字符串之间ÿ

问题描述:

有在here类似的问题。在那个问题X恰好是(和Y碰巧是)。我在寻找类似提取字符串,字符串X和字符串之间ÿ

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

我怎样才能建立一个功能

+0

我应该是返回GetStringBetweenStrings(的 “Hello World这个世界,这是一个测试”, “世界”, “测试”);? – 2012-04-26 21:44:29

+0

shoud return'这是' – 2012-04-26 22:36:16

在同一链接的问题,你有所有的字符串,在此处修改工作更加灵活的答案:

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; 
} 
+0

您需要将leftString的长度添加到开头,否则您的子字符串将包含leftString。 – 2012-04-26 21:48:32

+0

好点,更新。 – yamen 2012-04-26 21:49:23

+0

对于正则表达式版本,您可能想要使用。*?作为当前表达将匹配“a或b)或(c或d”从:“(a或b)或(c或d)”而不是“a或b”和“c或d” – jessehouwing 2012-05-01 21:43:52

使用indexOf功能定位两个字符串。然后使用SubString来提取你需要的东西。

(?<=World).*(?=test) 

http://regexr.com?30ph4

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

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); 
} 
+0

这对我没有用。也许我做错了什么.... – 2012-04-26 22:35:38