2012-07-11 42 views
1

我有類似下面的字符串: 「1y 250 2y 32%3y otherjibberish」。用正則表達式隔離多個匹配之間的內容

我的最終目標是將其分割成以下: 「1Y 250」 「2Y 32%」 「3Y otherjibberish」

這些分裂之間的主要 '分隔符' 是「\ d + Y 「模式。使用正則表達式(C#4.0),我可以使用匹配函數來匹配一個數字後跟一個'y',但我不知道如何獲得匹配後的所有內容,但是在下一個匹配之前。

有沒有辦法做到這一點?

希望這是有道理....非常感謝 - kcross

+0

還能有多個或每個'\ dy'分隔符之間小於2位(禁止第一個/最後一個)? – Servy 2012-07-11 18:17:19

+0

是的,可以是可變的(部分是用戶輸入的,所以你不能保證有兩個空格......) – keynesiancross 2012-07-11 18:24:31

回答

2

您可以使用「MatchCollection」根據事件拆分字符串。 下面的例子幾乎是你想要的。每個字符串右側的空白字符不會被刪除。

代碼:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Text.RegularExpressions; 

namespace Q11438740ConApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string sourceStr = "1y 250 2y 32% 3y otherjibberish"; 
      Regex rx = new Regex(@"\d+y"); 
      string[] splitedArray = SplitByRegex(sourceStr, rx); 

      for (int i = 0; i < splitedArray.Length; i++) 
      { 
       Console.WriteLine(String.Format("'{0}'", splitedArray[i])); 
      } 

      Console.ReadLine(); 
     } 

     public static string[] SplitByRegex(string input, Regex rx) 
     { 
      MatchCollection matches = rx.Matches(input); 
      String[] outArray = new string[matches.Count]; 
      for (int i = 0; i < matches.Count; i++) 
      { 
       int length = 0; 
       if (i == matches.Count - 1) 
       { 
        length = input.Length - (matches[i].Index + matches[i].Length); 
       } 
       else 
       { 
        length = matches[i + 1].Index - (matches[i].Index + matches[i].Length); 
       } 

       outArray[i] = matches[i].Value + input.Substring(matches[i].Index + matches[i].Length, length); 
      } 

      return outArray; 
     } 
    } 
} 

輸出:

'1y 250 ' 
'2y 32% ' 
'3y otherjibberish' 

「解決方案」 的7z文件:Q11438740ConApp.7z

0

這其實很簡單...只需使用Regex.Split()方法。

+0

注意:如果你分裂了,你將失去數字值(你會得到「{」250 「,」32%「,」otherjibberish「}'你可以推斷順序,但無序元素會很麻煩 – James 2012-07-11 18:49:14

+0

你使用什麼模式進行分割?當我這樣做時,數字仍然存在 – keynesiancross 2012-07-11 20:33:12

+0

我的控制檯應用程序外觀這樣'正則表達式的正則表達式=新的Regex(@ 「\ d + Y」); \t \t \t字符串輸入= 「1Y 250 2Y 32%3Y otherjibberish」; \t \t \t的foreach(字符串s在regex.Split(輸入)){ \t \t \t \t Console.WriteLine(「Item:」+ s); \t \t \t}' – James 2012-07-11 21:18:09