我有很多字符串格式:RGB:ABC.XX,DEF.XX,GHI.XX,其中ABCDEFGHI是数字。
我需要从该字符串中提取 R (ABC), G (DEF), B (GHI) 问题是字符串可以采用多种形式,如
RGB:AB.XX,DE.XX,GHI.XX
RGB:ABC.XX,DE.XX,GH.XX
RGB:ABC.XXX,DE.XX,GH.XX
RGB:ABC.XXX,DE.XX,GH.XX
...
...
...
正如您所看到的,从该字符串中提取此rbg需要考虑很多事情。
我尝试使用LINQ,但我认为这将是一团糟(仅适用于第一个'R'(红色)):
rgb[0] = new String(rgbName.SkipWhile(x => char.IsLetter(x) || x == ':').TakeWhile(x => char.IsNumber(x)).ToArray());
有更强大的高效方式吗?也许正则表达式可以做那件事,但我不是专家。任何帮助将不胜感激。
感谢。
答案 0 :(得分:1)
你可以试试这个正则表达式
.*?(?<R>\d+).*?(?<G>\d+).*?(?<B>\d+)
您可以像这样访问
Regex.Match(input,regex).Groups["R"].Value;//Red value
答案 1 :(得分:1)
幸运的是,只需要有限度的正则表达式专业知识,所以试一试:
您需要了解的内容:
()
包含一个捕获组 - 从完整匹配中,您将能够将这些提取为单个字符串[]
包含一组允许的字符\.
是一个fullstop(转义,因为它在C#的正则表达式实现中具有[]
之外的特殊含义)\
通常用于转义特殊字符+
表示前一个子表达式的一次或多次 ^
和$
分别表示字符串的开头和结尾考虑到这一点,您可以尝试以下正则表达式:
^RGB\:([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+$
使用此功能调用Match
method的Regex
class。
生成的Match
实例有Groups
property,其中应包含四个元素:
每个此类项目都是Group
class的一个实例。使用其Value
property检索匹配的字符串。
答案 2 :(得分:1)
是的,正则表达式将是理想的,但在您了解之前,请使用您(以及普通开发人员)所知道的内容。
将问题分解为较小的问题
- 删除“RGB:”部分
- 将字符串拆分为字符串数组,并用逗号(,)分隔
- 从数组中的每个字符串中获取值
最佳解决方案不是代码行数较少的解决方案。这是后来必须阅读您的代码的任何开发人员都能理解的。