【问题标题】:Get specific characters from string从字符串中获取特定字符
【发布时间】:2013-05-10 14:44:07
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 当您正在寻找一种高效的方式时,我会说:-)
  • ABCDEFGHI 是正确的数字!
  • 一些string.Split 可能会在你的未来......
  • @Anirudh ABCDEFGHI ar number 是的,对不起。
  • 我同意戴夫的观点。我将首先使用 IndexOf 获取一个子字符串并使用冒号 + 1 的索引。然后您将有一个子字符串,例如:“ABC.XX,DE.XX,GHI.XX”。然后您可以使用 List tempList = yourSubstring.Split(',').ToList();那么你的 tempList 中应该有 3 个对象,你可以只获取 '.' 之前的值。对于每个字符串。话虽如此,我确信 RegEx 可能是解决此问题的最佳解决方案。

标签: c# regex string linq split


【解决方案1】:

幸运的是,这仅需要一定程度的正则表达式专业知识,因此请尝试一下:

你需要知道的:

  • () 包含一个捕获组 - 从完整匹配中,您将能够将它们提取为单个字符串
  • [] 包含一组允许的字符
  • \. 是句号(转义,因为在 C# 的正则表达式实现中,它在 [] 之外具有特殊含义)
  • \ 一般用于转义特殊字符
  • + 表示前面的子表达式的一次或多次
  • ^$ 分别表示字符串的开头和结尾

考虑到这一点,您可以尝试以下正则表达式:

^RGB\:([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+\,([0-9]+)\.[0-9]+$

使用它来调用Regex classMatch method

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

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

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

【讨论】:

  • 我不明白 R、G、B 组可以在哪里应用和使用您给定的正则表达式读取。但感谢您的信息:-)
  • @Sebastien:每个([0-9]+) 都是这样的一组。在英语中,它的意思是“一个包含一个或多个数字的捕获组”。因此,我得到的正则表达式查找文字文本RGB:,然后它需要第一个这样的组,然后是一个点,然后是另一组数字,然后是一个逗号,等等。每个捕获组都可以通过Group 实例访问,如消息末尾所述。
【解决方案2】:

你可以试试这个正则表达式

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

你可以这样访问组

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

【讨论】:

    【解决方案3】:

    是的,正则表达式将是理想的,但在您了解这一点之前,请使用您(以及普通开发人员)所知道的内容。

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      相关资源
      最近更新 更多