如何将正则表达式与新行匹配并在括号内?

时间:2016-07-07 19:10:35

标签: c# regex

以下是我的文字示例:

[10:24:33.361][RestApi.RestEngine  
ERROR GET 
process-meter/util/verify 
Status code Forbidden 
Content {"versions":1} 
]

时间部分:

[10:24:33.361]

很容易:

(\[\d{2}:\d{2}:\d{2}\.\d{3}\])

我需要帮助的是正则表达式,以匹配时间后的字符串,用括号分隔,并在其中包含新行

所以我编辑了这个问题,把它放回到“新行”正则表达式问题......解决方法是重新编写日志记录对象,将输出放在一行或者像Mike Robinson建议的那样,使用预解析器,然后使用正则表达式。

请将此标记为已关闭。

3 个答案:

答案 0 :(得分:2)

使用MediaRecorder.stop()

RegexOptions.MultiLine

这里有关于它的作用的文档:

var match = Regex.Match("myInputStr", "my pattern", RegexOptions.Multiline);

答案 1 :(得分:1)

我相信这就是诀窍:

var pattern = @"(\[\d{2}:\d{2}:\d{2}\.\d{3}\])(\[[\s\S]*\])";
var matches = Regex.Matches(input, pattern);
var group = matches.Count > 0 ? matches[0].Groups[2] : null; // group == null if the input isn't a match for the pattern.

这是group.Value

[RestApi.RestEngine  
ERROR
GET process-meter/util/verify
Status code Forbidden 
Content {"versions":[1]}

]

答案 2 :(得分:1)

当然,所有优秀的答案,但......另外......

"当你漫步在这条樱草花路径上时,"请记住两件重要的事情:

  1. 有些事情根本无法使用一个正则表达式完成。
  2. 通过采取最终证明是错误的方法开始非常容易,然后进行调整并调整它并再次进行调整"因为实际的文件数据会引发一个又一个的猴子扳手。
  3. 在这种情况下,我退后一步,考虑awk实用程序采用的一般方法,该方法首先对文件中的各行进行分类,然后根据"键入"执行某些操作。线被认可。即使有问题的文件似乎包含一个"更多嵌套," vs。"严格逐行"结构,也许这次你可以逐步采用逐行策略。

    要在awk以外的工具中模拟相同的逻辑,您将首先使用正则表达式决定"您拥有什么样的源代码行,&# 34;然后你调用一个特定于那种行的子程序。

    但是,最后,"有时你实际上需要一个解析器。"