You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将虚线分隔的日志文本分割为字符串数组?

解决日志按任意长度虚线分割的问题

你的原代码存在核心问题:用字符数组{ '-','-','-','-','-','-' }分割时,会把**单个'-'**作为分割依据,不仅会误拆分日志内容里的'-'(比如AUDIT -中的连接符),还无法匹配日志中长短不一的虚线分隔线(示例里的分隔线长度分别是25、29个'-')。

下面是两种可行的解决方案:

方案一:正则直接分割连续虚线

利用正则表达式匹配4个及以上连续的'-'(确保不会误匹配日志里的单个/少数'-'),同时自动处理分隔线前后的换行和空白:

using System.Text.RegularExpressions;
using System.Linq;

// 读取日志内容
string textFromFile = _streamReader.ReadToEnd();

// 分割并过滤无效空元素
string[] paragraphs = Regex.Split(textFromFile, @"\s*-{4,}\s*")
    .Where(paragraph => !string.IsNullOrWhiteSpace(paragraph))
    .ToArray();

代码说明:

  • \s*-{4,}\s*:\s*匹配分隔线前后的任意空白/换行,-{4,}匹配至少4个连续的'-';
  • Where(...):过滤分割后产生的空字符串或全空白字符串。

方案二:统一分隔符后再分割

先将所有长短不一的虚线替换为统一的自定义分隔符,再进行分割,适合需要更直观控制分隔逻辑的场景:

using System.Text.RegularExpressions;

string textFromFile = _streamReader.ReadToEnd();

// 将所有连续4个及以上的'-'替换为统一分隔符
string normalizedLog = Regex.Replace(textFromFile, @"-{4,}", "###LOG_SEPARATOR###");

// 分割并修剪每个段落的前后空白
string[] paragraphs = normalizedLog.Split(
    new string[] { "###LOG_SEPARATOR###" }, 
    StringSplitOptions.RemoveEmptyEntries)
    .Select(paragraph => paragraph.Trim())
    .ToArray();

代码说明:

  • Regex.Replace(...):统一所有虚线分隔符,避免因长度不同导致分割失败;
  • Select(paragraph => paragraph.Trim()):移除每个段落前后的多余换行和空白,让内容更整洁。

两种方案处理示例日志后,都会得到3个元素的数组:

  • paragraphs[0]:8/23 17:40:54:761 6948 - AUDIT - Logging: Set ABC
  • paragraphs[1]:08/23 17:40:54:772 6948 - TRANSACTION - Logging: FullFileName:/XYZ/ Message:Some Message Type : Information
  • paragraphs[2]:08/23 17:40:54:844 6948 - INFO - Logging: End of Control_Loaded

内容的提问来源于stack exchange,提问作者DotNetSpartan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:48:47