首页 > 解决方案 > 在多行上按正则表达式拆分

问题描述

我有一个包含我的消息的文件文档。

我想对每条消息进行拆分,但格式很糟糕。

日期:2019 年 11 月 27 日 08:35am

来自:dsad (123)

消息 ID:1231

主题:你好

你好1

日期:2019 年 11 月 27 日 08:35am

来自:dsad (123)

消息 ID:1232

主题:你好

你好2

日期:2019 年 11 月 27 日 08:35am

来自:dsad (123)

消息 ID:1233

主题:你好

你好3

我如何提取数据?

就像是

private Message {
    DateTime date;
    int fromID;
    int messageID;
    string fromUsername;
    string subject;
    string message;
}

foreach (Message message in messages.Split([...]))
{
    Console.WriteLine(message.messageID);
}

实现这一目标的最佳方法是什么?

我想拆分正则表达式

日期:日期时间

来自:字符串(INT)

消息 ID:INT

主题: STRING ONE ROW

直到下一个日期时间行的多行消息

谢谢!

标签: c#asp.net

解决方案


您可以尝试包含整个消息的正则表达式模式(在https://www.myregextester.com/index.php测试):

var regex = new Regex(@"
  Date:\s+(?<date>[^\r\n]*)[\r\n]+
  From:\s+(?<fromUsername>.*?)\s+\((?<fromID>\d+)\)[\r\n]+
  Message-Id:\s+(?<messageID>\d+)[\r\n]+
  Subject:\s+(?<subject>[^\r\n]*)[\r\n]+
  (?<message>[^\r\n]*)
", RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
var messages = regex.Matches(...);

然后,命名的捕获组可以帮助您提取所需的详细信息。


推荐阅读