我正在尝试使用正则表达式查找所有颜色十六进制代码。
例如,我有这个字符串值 - #FF0000FF#0038FFFF#51FF00FF#F400FFFF
我使用这个:
#.+?(?=#)
匹配所有字符的模式,直到它到达 #
,但它在最后一个字符处停止,这应该是最后一个匹配项。
我对正则表达式有点陌生。我怎样才能得到最后一场比赛?
最佳答案
您的正则表达式与最后一个值不匹配,因为您的正则表达式(具有正前瞻性 (?=#)
)需要 #
出现在已消耗的值之后,并且字符串末尾没有#
。
你可以使用
#[^#]+
参见 regex demo
[^#]
否定字符类匹配除 #
之外的任何字符(+
表示 1 次或多次出现) 并且不需要 #
立即出现在当前匹配值的右侧。
在 C# 中,您可以使用以下命令收集所有匹配项
var result = Regex.Matches(s, @"#[^#]+")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
您可以使用的更精确的模式是 #[A-Fa-f0-9]{8}
,它匹配 #
,然后是任意 8 个十六进制字符,从a
到f
和A
到F
的数字或字母。
关于c# - 正则表达式匹配所有字符直到到达字符,但也包括最后一个匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307828/