【发布时间】:2013-03-25 10:31:14
【问题描述】:
所以我正在尝试编写一个正则表达式来过滤特定 sn-ps 的文本文件(寻找速度而不是蛮力)。
我想从每场比赛中得到三样东西:
- 一个键来识别一个sn-p
- 一种可选的语言来格式化每个sn-p
- 值,表示开始和结束标记之间的所有行
这是正则表达式(可以在此处找到失败的测试工具 - https://gist.github.com/shiftkey/5236161):
(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*[\n](?<value>.*?)[\n].*end code (?<key>[A-Za-z-]*)
使用这些选项:RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline。
所以一个像这样的文件:
// code start foo csharp
var x = 1;
// end code foo
给我期望值:
- 键:foo
- 语言:csharp
-
价值:
var x = 1;
但是当我引入第二行的 sn-p 时,我只得到最后一行:
// code start foo csharp
var x = 1;
var y = 2;
// end code foo
- 键:foo
- 语言:csharp
-
价值:
var y = 2;
代替
-
值:
var x = 1;\r\nvar y = 2;(或类似)
让组覆盖多行时我错过了什么?
我查看了 SO 上提出的类似场景,但它们对我的使用不起作用。
【问题讨论】:
-
使用 SingleLine 而不是 Multiline to "."匹配“\n”? stackoverflow.com/questions/289440/…
-
我想解析任何类型的文本文件——不仅仅是 XML。我可以用 C# 或 ruby 或任何具有 cmets 的语言来做示例......