我不想将 XML 用于我的 T4 的输入文件,所以我制作了这个片段,将文档分成由空行分隔的 block 。
我是否适本地在此处将回车设为可选?
string s = @"Default
Default
CurrencyConversion
Details of currency conversions.
BudgetReportCache
Indicates wheather the budget report is taken from query results or cache.";
string oneLine = @"[\r]\n";
string twoLines = @"[\r]\n[\r]\n";
var chunks = Regex.Split(s, twoLines, RegexOptions.Multiline);
var items = chunks.Select(c=>Regex.Split(c, oneLine, RegexOptions.Multiline)).ToDictionary(c=>c[0], c=>c[1]);
注意:我永远不会想到这一点,但自从我开始使用 Git 以来,我看到它“说”了一些让我想起 unix2dos 问题的东西,这反过来让我想到了 Mono,最后如果我需要的话处理可移植性(假设目标是完美)。
请您参考如下方法:
您的正则表达式与您认为的不同。将 \r 放入集合中不会完成任何事情;表达式 [\r]\n 与 \r\n 的含义相同。
您可以使用 ? 运算符来完成这项工作:
string oneLine = @"\r?\n";
string twoLines = @"\r?\n\r?\n";
但是,我建议您使用常规的 String.Split 方法而不是正则表达式:
string[] oneLine = { @"\r\n", @"\n" };
string[] twoLines = { @"\r\n\r\n", @"\n\n" };
var chunks = s.Split(twoLines, StringSplitOptions.None);
var items =
chunks.Select(c => c.Split(oneLine, StringSplitOptions.None))
.ToDictionary(c => c[0], c => c[1]);
