【问题标题】:Split by regex on multiple line在多行上按正则表达式拆分
【发布时间】:2020-03-30 21:33:02
【问题描述】:

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

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

日期:2019 年 11 月 27 日上午 8:35

来自:dsad (123)

消息 ID:1231

主题:嗨

你好1

日期:2019 年 11 月 27 日上午 8:35

来自:dsad (123)

消息 ID:1232

主题:嗨

你好2

日期:2019 年 11 月 27 日上午 8:35

来自: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);
}

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

我想拆分正则表达式

日期:日期时间

发件人:STRING (INT)

消息 ID:INT

主题:STRING ONE ROW

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

谢谢!

【问题讨论】:

  • 澄清一下,每个新段都以关键字“日期”开头,然后每个段都有其余的段?

标签: c# asp.net


【解决方案1】:

您可以尝试包含整个消息的正则表达式模式(在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(...);

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

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2011-06-29
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多