I want to extract the content after the :, but there can be only one :.
Examples:
foo:bar # match, extract 'bar'
foo:123 # match, extract '123'
foo:bar:123 # do not match
So that last example should not match because it has multiple :.
I tried a negative lookbehind ^. (?<!:):(. )$ but that nonetheless matches and extracts from that last example.
Here's a demo.
CodePudding user response:
Try (regex101):
^[^:] :([^:] )$
This will match only lines with one : and get the string after the :
CodePudding user response:
In C# you could also make use of lookbehind with an infinite quantifier to get a match only:
(?<=^[^:]*:)[^:] $
Explanation
(?<=Positive lookbehind, assert what is to the left is^Assert the start of the string[^:]*:Match optional chars other than:followed by matching the:
)Close the lookbehind[^:]Match 1 chars other than:$End of string
See a .NET regex demo.
If you don't want to cross newlines:
(?<=^[^:\r\n]*:)[^:\r\n] $
