繁体   English   中英

从字符串中获取特定字符

[英]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]+$

使用它来调用RegexMatch方法

生成的Match实例具有Groups属性 ,该属性应包含四个元素:

  • 完整的匹配字符串
  • R部分
  • G部分
  • B部分

每个此类项目都是Group类的一个实例。 使用其Value属性检索匹配的字符串。

是的,正则表达式将是理想的选择,但是在您了解这一点之前,请与您(以及普通开发人员)所知道的一起工作。

将问题分解成更小的问题
-删除“ RGB:”部分
-使用逗号(,)将定界符拆分为字符串数组
-从数组中的每个字符串获取值

最好的解决方案不是具有更少代码行的解决方案。 这是任何开发人员都可以理解的一种,以后必须阅读您的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM