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

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

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

例如,我有这个字符串值 - #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 个十六进制字符,从afAF的数字或字母。

关于c# - 正则表达式匹配所有字符直到到达字符,但也包括最后一个匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307828/

相关文章:

C++顺序搜索找不到最后一个元素

c# - 列表模型 --> orderbydescending System.DateTime 不起作用?

c# - XPath 所有后代,即使是嵌套的 - 但不是父级的后代

javascript - 在 JavaScript 正则表达式中搜索 » 字符

javascript - 使用 RegEx 在 Javascript 中匹配重复数字(相同的数字)两次

python - Google Apps Engine 数据存储区搜索

c# - 如何从 Visual Studio 2010 恢复已删除的项目?

c# - 通过查询字符串将复杂对象传递到 .netcore1.1 Webapi

javascript - RegEx 引用被替换的字符

使用给定单词列表的 Android 语音识别(在搜索小部件中)