C#Regex.Split有许多超过20个的字符串模式
本文关键字:字符串 模式 20个 Split 许多超 C#Regex | 更新日期: 2023-09-27 18:20:27
嗨,我试图使用Regex过滤大量文本文件。使用大约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]);
}
您使用的是Regex
类的静态Split
方法。在Regex
实例上还有一个Split
方法,例如:
new Regex(@"(LINE|3DFACE|3DSOLID)").Split(originalString, 5, 0);
您的代码在正则表达式中包含以下内容:
"LIGHT||LWPOLYLINE"
这在我看来是个错误。
您还应该注意,当您有这样的正则表达式时:
"MLEADER|MLEADERSTYLE"
和这样的字符串:
"MLEADERSTYLE"
它将匹配CCD_ 5,因为这在正则表达式中较早发生。如果短文字作为较长文字的前缀出现,请将较长文字放在前面。
Like@IanNorton说,根据您的源数据,您可能需要考虑使用字符串标记器,而不是RegEx/Split。开发Lucene.Net的人有一个很好的例子可以借鉴。