2012-01-15 28 views
0

嗨,我試圖過濾大量的文本文件使用Regex.Split大約超過20我需要使用的字符串模式,但結果是不正確的,有這麼多空弦。下面C#Regex.Split與多個字符串模式超過20

是我的代碼

string[] tmp = Regex.Split(originalString, @"(LINE|3DFACE|3DSOLID|ARC|ATTDEF|ATTRIB|BODY|CIRCLE|DIMENSION|ELLIPSE|HATCH|HELIX|IMAGE|INSERT|LEADER|LIGHT||LWPOLYLINE|MLINE|MLEADER|MLEADERSTYLE|MTEXT|OLEFRAME|OLE2FRAME|POINT|POLYLINE|RAY|REGION|SECTION|SEQEND|SHAPE|SOLID|SPLINE|SUN|SURFACE|TABLE|TEXT|TOLERANCE|TRACE|UNDERLAY|VERTEX|VIEWPORT|WIPEOUT|XLINE)"); 

,如果我只使用了其中的5那麼結果是能夠做到完全按照我需要的,是有regex.split字符串模式的任何限制?

編輯1

感謝@MRAB

這裏是實際運行的工作和右輸出的代碼

 string fileName = textBox1.Text; 
     var stopwatch = new System.Diagnostics.Stopwatch(); 
     stopwatch.Start(); 
     TextReader sr = new StreamReader(fileName); 
     string originalString = sr.ReadToEnd(); 
     sr.Close(); 
     string[] tmp = Regex.Split(originalString, @"(3DFACE|3DSOLID|ACAD_PROXY_ENTITIY|ARC|ATTDEF|ATTRIB|BODY|CIRCLE|DIMENSION|ELLIPSE|HATCH|HELIX|IMAGE|INSERT|LEADER|LIGHT|LWPOLYLINE|MLINE|MLEADERSTYLE|MLEADER|MTEXT|OLEFRAME|OLE2FRAME|POINT|POLYLINE|RAY|REGION|SEQEND|SHAPE|SOLID|SPLINE|SUN|SURFACE|TABLE|TEXT|TOLERANCE|TRACE|UNDERLAY|VERTEX|VIEWPORT|WIPEOUT|XLINE|LINE)"); 
     List<string> result = new List<string>(); 


     for (var i = 1; i < tmp.Count() - 1; i += 2) 
     { 

      result.Add(tmp[i] + tmp[i + 1]); 
     } 
+2

輸出看起來像什麼,除了空字符串?只是猜測......可能是||在LIGHT和LWPOLYLINE之間 – Roman 2012-01-15 23:39:50

+0

聽起來有點像你實際上不需要一個正則表達式,而是將字符串標記爲 – IanNorton 2012-01-15 23:48:23

回答

0

您使用的是Regex類的靜態Split方法。還有一個Split方法上Regex情況下,例如:

new Regex(@"(LINE|3DFACE|3DSOLID)").Split(originalString, 5, 0); 

你的代碼包含在這個正則表達式:

"LIGHT||LWPOLYLINE" 

它看起來像一個錯誤給我。

你還應該注意的是,當你有一個這樣的正則表達式:

"MLEADER|MLEADERSTYLE" 

像這樣的字符串:

"MLEADERSTYLE" 

會因爲早在一個正則表達式匹配發生"MLEADER"。如果短文字作爲較長文字的前綴出現,請先放較長的文字。

+0

umm你的代碼中5和0的含義是什麼? 'Split(originalString,5,0);' – Gamma 2012-01-15 23:52:02

+0

原型方法是'public string [] Split(string input,int count,int startat)'。在問你如何限制拆分的數量;這將限制它5分裂。 – MRAB 2012-01-15 23:56:48

+0

啊是的,謝謝你@MRAB我沒有意識到這個錯誤,我只是碰巧知道我們應該把更早的那個放到更早的位置。非常感謝:D – Gamma 2012-01-15 23:57:49

0

像@IanNorton說,根據您的源數據,您可能想要考慮使用字符串標記器而不是RegEx/Split。開發Lucene.Net的人有一個很好的例子,你可以使用/學習。