c# - 在多行上按正则表达式拆分
问题描述
我有一个包含我的消息的文件文档。
我想对每条消息进行拆分,但格式很糟糕。
日期: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
直到下一个日期时间行的多行消息
谢谢!
解决方案
您可以尝试包含整个消息的正则表达式模式(在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(...);
然后,命名的捕获组可以帮助您提取所需的详细信息。
推荐阅读
- types - Apex 中是否存在隐式输入?
- docker - 按名称过滤 docker 容器并停止它们
- node.js - Firebase 可调用函数权限
- android - RecyclerView StateRestorationPolicy 结合 AppBarLayout
- r - 带有长表的长脚注
- python - 根据列表中出现的字符串对数据框行进行分类
- java - 如何打印最长的三个字符串?
- r - Weighted mean of a group, where weight is from another group
- android - React Native:来自 uri 的图像未在 Android 上使用字符串插值来呈现以移交令牌
- java - 流分组列表
- >