我正在尝试使用正则表达式查找所有Color Hex代码。
例如,我有这个字符串值-#FF0000FF#0038FFFF#51FF00FF#F400FFFF
,我用这个:
#.+?(?=#)
匹配所有字符直到到达#
的模式,但它停在最后一个字符(应该是最后一个匹配项)上。
我对Regex东西有点陌生。我怎么还能得到最后一场比赛?
答案 0 :(得分:0)
您的正则表达式与上一个值不匹配,因为正则表达式(正向为(?=#)
)要求#
出现在已经消耗的值之后,并且没有#
字符串的结尾。
您可以使用
#[^#]+
请参见regex demo
[^#]
否定的字符类与任何字符匹配,但#
(+
表示 1次或多次)并且不需要#
会立即显示在当前匹配值的右侧。
在C#中,您可以使用
收集所有匹配项var result = Regex.Matches(s, @"#[^#]+")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
您可以使用的更精确的模式是#[A-Fa-f0-9]{8}
,它与#
匹配,然后匹配从a
到f
和{{的8个十六进制字符,数字或字母1}}到A
。
答案 1 :(得分:0)
不要依赖#后面的任何字符,而是匹配十六进制字符
每次都会工作。
(?i)#[a-f0-9]+