从字符串中获取特定字符
本文关键字:字符 获取 字符串 | 更新日期: 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:"部分
—用逗号(,)
分隔字符串为字符串数组-从数组
最好的解决方案不是代码行数少的那个。它可以被任何开发人员理解,因为他们以后必须阅读你的代码。