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

本文关键字:新行 正则表达式 | 更新日期: 2023-09-27 17:56:06

这是我的文字示例:

[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 建议的那样,使用预解析器,然后使用正则表达式。

请将其标记为已关闭。

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

使用 RegexOptions.MultiLine

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

以下是有关其功能的文档:

    //
    // Summary:
    //     Multiline mode. Changes the meaning of ^ and $ so they match at the beginning
    //     and end, respectively, of any line, and not just the beginning and end of the
    //     entire string. For more information, see the "Multiline Mode" section in the
    //     Regular Expression Options topic.
    Multiline = 2,

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

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

  1. 有些事情根本无法仅使用一个正则表达式来完成。
  2. 最终被证明是错误的方法开始是非常容易的,然后"调整它,调整它,再调整它",因为实际的文件数据会让你一个接一个地陷入困境。

在这种情况下,我会退后一步,考虑 awk 实用程序所采取的一般方法,该方法首先对文件中的各个行进行分类,然后根据识别的行"类型"执行某些操作。尽管有问题的文件似乎包含"更嵌套"而不是"严格逐行"的结构,但也许这次您可以摆脱逐行策略。

要在 awk 以外的工具中模拟相同的逻辑,您将首先使用正则表达式来决定"您拥有哪种源代码行",然后调用特定于该行的子例程。

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

我相信

这可以解决问题:

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]}
]