C#Regex.Split有很多字符串模式超过20个

时间:2012-01-15 23:30:37

标签: c# xml regex text-files

您好我试图使用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 个答案:

答案 0 :(得分:0)

您正在使用Split类的静态Regex方法。 Split个实例上还有一个Regex方法,例如:

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

您的代码在正则表达式中包含此内容:

"LIGHT||LWPOLYLINE"

这对我来说似乎是个错误。

你还应该注意,当你有这样的正则表达式时:

"MLEADER|MLEADERSTYLE"

和这样的字符串:

"MLEADERSTYLE"

它将匹配"MLEADER",因为它出现在正则表达式的早期。如果短文字作为较长文字的前缀出现,请将较长的字面值提前。

答案 1 :(得分:0)

与@IanNorton一样,根据您的源数据,您可能需要考虑使用字符串标记符而不是RegEx / Split。开发Lucene.Net的人有一个很好的例子,你可以使用/学习。