从字符串中获取特定字符

本文关键字:字符 获取 字符串 | 更新日期: 2023-09-27 18:12:57

我有许多字符串格式: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());

是否有更有效的方法来做到这一点?也许正则表达式可以做那件事,但我不是专家。任何帮助都将是感激的。

谢谢。

从字符串中获取特定字符

幸运的是,这只需要有限程度的正则表达式专业知识,所以请尝试一下:

你需要知道的:

  • ()包含一个捕获组-从完整匹配中,您将能够将其提取为单个字符串
  • []包含一组允许的字符
  • '.是一个句号(转义,因为它在c#的regex实现中有[]之外的特殊含义)
  • '一般用于转义特殊字符
  • +表示前面子表达式
  • 的一次或多次
  • ^$分别表示字符串的开始和结束,
考虑到这一点,您可以尝试以下正则表达式:
^RGB':([0-9]+)'.[0-9]+',([0-9]+)'.[0-9]+',([0-9]+)'.[0-9]+$

调用Regex类的Match方法。

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

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

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

你可以试试这个regex

.*?(?<R>'d+).*?(?<G>'d+).*?(?<B>'d+)

你可以像这样访问组

 Regex.Match(input,regex).Groups["R"].Value;//Red value

是的,regex将是理想的,但在您了解它之前,请使用您(和普通开发人员)所知道的。

把问题分解成小问题
-删除"RGB:"部分
—用逗号(,)
分隔字符串为字符串数组-从数组

中获取每个字符串的值

最好的解决方案不是代码行数少的那个。它可以被任何开发人员理解,因为他们以后必须阅读你的代码。