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

Regex Match all characters until reach character, but also include last match

我正在尝试使用正则表达式查找所有颜色十六进制代码。

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

#.+?(?=#)

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

我对正则表达式有点陌生。我怎样才能得到最后一场比赛?

您的正则表达式与最后一个值不匹配,因为您的正则表达式(具有正前瞻性 (?=#))需要 # 出现在已消耗的值之后,并且没有 # 在字符串的末尾。

您可以使用

#[^#]+

regex demo

[^#] 否定字符 class 匹配除 # 之外的任何字符(+ 表示 出现 1 次或更多次 )并且不需要 # 立即出现在当前匹配值的右侧。

在 C# 中,您可以使用

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

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

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

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