正则表达式匹配所有字符,直到达到字符,还包括最后一个匹配项

时间:2018-11-14 19:53:33

标签: c# regex search preg-match regex-lookarounds

我正在尝试使用正则表达式查找所有Color Hex代码。

例如,我有这个字符串值-#FF0000FF#0038FFFF#51FF00FF#F400FFFF,我用这个:

#.+?(?=#)

匹配所有字符直到到达#的模式,但它停在最后一个字符(应该是最后一个匹配项)上。

我对Regex东西有点陌生。我怎么还能得到最后一场比赛?

2 个答案:

答案 0 :(得分:0)

您的正则表达式与上一个值不匹配,因为正则表达式(正向为(?=#))要求#出现在已经消耗的值之后,并且没有#字符串的结尾。

您可以使用

#[^#]+

请参见regex demo

[^#]否定的字符类与任何字符匹配,但#+表示 1次或多次)并且不需要#会立即显示在当前匹配值的右侧。

在C#中,您可以使用

收集所有匹配项
var result = Regex.Matches(s, @"#[^#]+")
    .Cast<Match>()
    .Select(x => x.Value)
    .ToList();

您可以使用的更精确的模式是#[A-Fa-f0-9]{8},它与#匹配,然后匹配从af和{{的8个十六进制字符,数字或字母1}}到A

答案 1 :(得分:0)

不要依赖#后面的任何字符,而是匹配十六进制字符
每次都会工作。

(?i)#[a-f0-9]+