簡體   English   中英

提取字符串X和字符串Y之間的字符串

[英]Extract string that is between string X and string Y

有一個類似的問題在這里 在那個問題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 ";

我該如何構建該功能

在同一個鏈接的問題中,您有一個更靈活的答案,適用於所有字符串,在此修改:

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;
}
(?<=World).*(?=test)

http://regexr.com?30ph4

這是一個正則表達式解決方案。 在構建正則表達式模式時,替換World並使用字符串變量進行test

使用IndexOf函數找到兩個字符串。 然后使用SubString提取您需要的內容。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM