[英]C# Reqex for new line followd by char and 10 digits
我的问题是:我有一个大约100 Mb的文件,我试图逐行读取并进行一些处理。 表现不是很好。 这就是为什么我现在要立即使用ReadAllLines()更改并在内存中读取它,然后将其拆分到一些报告中,这些报告以包含T的行和后跟10位数字的行来标记。 有人可以帮助我生成可用于拆分的正确正则表达式吗?
@"(\n|\r|\r\n)[T](?<!\d)\d{10}(?!\d)",
这个对吗? 提前致谢!
您的案例的分割模式如下所示:
(?=\DT\d{10}\D)
代码示例 :
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main(string[] args)
{
String sourcestring = @"sdfso dadfjlsdfjksdjfkjsd
sdfso dadfjlsdfjksdjfkjsd
T1234567898dssdkfjskfjksdj
T1234567890dssdkfjskfjksdj
sdfso dadfjlsdfjksdjfkjsd
T1234567891dssdkfjskfjksdj";
String matchpattern = @"(?=\DT\d{10}\D)";
Regex re = new Regex(matchpattern);
String[] splitarray = re.Split(sourcestring);
for(int sIdx = 0; sIdx < splitarray.Length; sIdx++ ) {
Console.WriteLine("[{0}] = {1}", sIdx, splitarray[sIdx].Trim());
}
}
}
根据您的上下文,可能最好还是逐行读取一个大文件,并按照Wiktor的建议,将单个报告/块收集在列表等中。 您还可以并行地进一步处理报告/块。 我建议使用StreamReader和StringBuilder类。
实施范例
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string pattern = @"^T\d{10}\D";
var re = new Regex(pattern);
var result = new List<string>();
var block = new StringBuilder();
var fileStream = new FileStream(@"c:\file.txt", FileMode.Open, FileAccess.Read);
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (re.IsMatch(line))
{
//store current block or hand it off to different process, etc.
result.Add(block.ToString());
block.Clear();
}
block.AppendLine(line);
}
// final block
result.Add(block.ToString());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.