'Parse log level with a regular expression in C# [closed]
I have text that I want to parse. The log
level for example:
This is simple [fail] text
So in this case I want to take [fail]
, so I do it with \[.*?\]
.
Now in case my log
level is with this format:
|fail|
I want to be able to parse it as well, so I try to add this:
\[.*?\]|.*?\|
But in case my text is This is simple |fail| text
, the match is only fail|
.
Solution 1:[1]
You can use
(?:(\[)|(\|)).*?(?(1)]|\|)
See the regex demo. Or, only matching fail
:
(?<=(?:(\[)|(\|))).*?(?=(?(1)]|\|))
See this regex demo.
Regex details
(?:(\[)|(\|))
- either[
(captured into Group 1) or|
(captured into Group 2).*?
- any zero or more characters other than line break chars, as few as possible(?(1)]|\|)
- a conditional construct: if Group 1 was matched ([
), then match]
, else, match|
.
In the second pattern, the left- and right-hand boundaries are enclosed into non-consuming lookarounds.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Peter Mortensen |