正则表达式匹配所有字符直到到达字符,但也包括最后一个匹配
Regex Match all characters until reach character, but also include last match
我正在尝试使用正则表达式查找所有颜色十六进制代码。
我有这个字符串值,例如 - #FF0000FF#0038FFFF#51FF00FF#F400FFFF
我用这个:
#.+?(?=#)
匹配所有字符的模式,直到到达 #
,但它在最后一个字符处停止,这应该是最后一个匹配项。
我对正则表达式有点陌生。我怎样才能得到最后一场比赛?
您的正则表达式与最后一个值不匹配,因为您的正则表达式(具有正前瞻性 (?=#)
)需要 #
出现在已消耗的值之后,并且没有 #
在字符串的末尾。
您可以使用
#[^#]+
[^#]
否定字符 class 匹配除 #
之外的任何字符(+
表示 出现 1 次或更多次 )并且不需要 #
立即出现在当前匹配值的右侧。
在 C# 中,您可以使用
收集所有匹配项
var result = Regex.Matches(s, @"#[^#]+")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
您可以使用的更精确的模式是 #[A-Fa-f0-9]{8}
,它匹配 #
,然后是从 a
到 f
的任何 8 个十六进制字符、数字或字母,以及A
到 F
.
不要依赖# 之后的任何字符,匹配十六进制字符和它
每次都会工作。
(?i)#[a-f0-9]+
我正在尝试使用正则表达式查找所有颜色十六进制代码。
我有这个字符串值,例如 - #FF0000FF#0038FFFF#51FF00FF#F400FFFF
我用这个:
#.+?(?=#)
匹配所有字符的模式,直到到达 #
,但它在最后一个字符处停止,这应该是最后一个匹配项。
我对正则表达式有点陌生。我怎样才能得到最后一场比赛?
您的正则表达式与最后一个值不匹配,因为您的正则表达式(具有正前瞻性 (?=#)
)需要 #
出现在已消耗的值之后,并且没有 #
在字符串的末尾。
您可以使用
#[^#]+
[^#]
否定字符 class 匹配除 #
之外的任何字符(+
表示 出现 1 次或更多次 )并且不需要 #
立即出现在当前匹配值的右侧。
在 C# 中,您可以使用
收集所有匹配项var result = Regex.Matches(s, @"#[^#]+")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
您可以使用的更精确的模式是 #[A-Fa-f0-9]{8}
,它匹配 #
,然后是从 a
到 f
的任何 8 个十六进制字符、数字或字母,以及A
到 F
.
不要依赖# 之后的任何字符,匹配十六进制字符和它
每次都会工作。
(?i)#[a-f0-9]+