如何将正则表达式与新行和括号内匹配
本文关键字:新行 正则表达式 | 更新日期: 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,
当然,所有优秀的答案,但是......另外。。。
"当你漫步在这条樱草小径上时,请记住两件重要的事情:
- 有些事情根本无法仅使用一个正则表达式来完成。 从
- 最终被证明是错误的方法开始是非常容易的,然后"调整它,调整它,再调整它",因为实际的文件数据会让你一个接一个地陷入困境。
在这种情况下,我会退后一步,考虑 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]}
]