[英]Get specific characters from string
我有许多字符串格式,例如: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());
有更有效的方法吗? 也许正则表达式可以做到这一点,但我不是专家。 任何帮助将不胜感激。
谢谢。
您可以尝试此正则表达式
.*?(?<R>\d+).*?(?<G>\d+).*?(?<B>\d+)
您可以像这样访问群组
Regex.Match(input,regex).Groups["R"].Value;//Red value
幸运的是,为此只需要有限程度的正则表达式专业知识,因此请尝试一下:
您需要了解的内容:
()
包含一个捕获组-从完全匹配项中,您可以将它们提取为单个字符串 []
包含一组允许的字符 \\.
是句号(已转义,因为在C#的regex实现中,它在[]
之外具有特殊含义) \\
通常用于转义特殊字符 +
表示上一个子表达式的一倍或多次 ^
和$
分别表示字符串的开头和结尾 考虑到这一点,您可以尝试以下正则表达式:
^RGB\:([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+$
生成的Match
实例具有Groups
属性 ,该属性应包含四个元素:
是的,正则表达式将是理想的选择,但是在您了解这一点之前,请与您(以及普通开发人员)所知道的一起工作。
将问题分解成更小的问题
-删除“ RGB:”部分
-使用逗号(,)将定界符拆分为字符串数组
-从数组中的每个字符串获取值
最好的解决方案不是具有更少代码行的解决方案。 这是任何开发人员都可以理解的一种,以后必须阅读您的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.