首页 > 解决方案 > C# 正则表达式:解析日志级别

问题描述

因此,我有要解析log级别的文本,例如:

This is simple [fail] text

所以在这种情况下,我想采取[fail],所以我这样做\[.*?\]

现在,如果我的log关卡是这种格式: |fail|我也希望能够解析它,所以我尝试添加这个:

\[.*?\]|.*?\|

但如果我的文字是This is simple |fail| text匹配的fail|

标签: c#regex

解决方案


您可以使用

(?:(\[)|(\|)).*?(?(1)]|\|)

请参阅正则表达式演示。或者,仅匹配fail

(?<=(?:(\[)|(\|))).*?(?=(?(1)]|\|))

看到这个正则表达式演示

正则表达式详细信息

  • (?:(\[)|(\|))- [(捕获到第 1 组)或|(捕获到第 2 组)
  • .*?- 除换行符之外的任何零个或多个字符,尽可能少
  • (?(1)]|\|)- 一个条件结构:如果第 1 组匹配([),则匹配],否则,匹配|

在第二种模式中,左右边界被封闭在非消耗性环视中。


推荐阅读