2012-04-26 177 views
1

有在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

回答

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

0

使用indexOf功能定位兩個字符串。然後使用SubString來提取你需要的東西。

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

http://regexr.com?30ph4

這裏是一個正則表達式的解決方案。在構建正則表達式模式時,用您的字符串變量替換Worldtest

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

這對我沒有用。也許我做錯了什麼.... – 2012-04-26 22:35:38

相關問題