问题描述
我必须对最后一个冒号之后和空格之间的单词进行完全匹配。例如在下面的句子
XYZ Cloud : ABC : Windows : Non Prod : Silver : ABC123XYZ : ABCdef Service is Down
这里我必须为ABCdef做全匹配。 ([^:.*\s]+$)
返回 Down,([^:]+$)
返回“ABCdef Service is Down”作为完全匹配。但是我正在寻找 ABCdef 作为完全匹配。
解决方法
您可以匹配到最后一次出现 :
,然后匹配一个空格并捕获第 1 组中的 1+ 个非空格字符。
^.*: +(\S+)
说明
-
^
字符串开头 -
.*: +
尽可能匹配除换行符外的任何字符,后跟 1 个或多个空格 -
(\S+)
捕获组 1,匹配 1+ 次非空白字符后跟一个空格
仅对于匹配,您可能会使用积极的环视:
(?<=: )[^\s:]+(?=[^\r\n:]*$)
说明
-
(?<=: )
正向后视,断言直接在左边的是`: -
[^\s:]+
匹配 1+ 次除空白字符或:
之外的任何字符
-
(?=[^\r\n:]*$)
正向前瞻,断言右边的内容 0+ 次除换行符或:
以外的任何字符,并断言字符串的结尾。
使用 C#,这是有效的:
var text = @"XYZ Cloud : ABC : Windows : Non Prod : Silver : ABC123XYZ : ABCdef Service is Down";
var regex = new Regex(@":(?!.*:)\s(.+?)\s.*$");
Console.WriteLine(regex.Match(text).Groups[1].Value);
我明白了:
ABCdef
,
我认为最简单的[ ]*([^: ]*)[^:]*$
-
[ ]*
:任意数量的空格 -
([^: ]*)
:目标非空格词组,没有冒号 -
[^:]*$
:不带冒号的其余行
https://regex101.com/r/LMQrb7/1
要访问您要查找的词,请使用组 1。