从字符串中间提取文本

时间:2016-02-02 09:51:41

标签: c# regex

我在查找汽车注册详细信息时从DVLA捕获了以下字符串,我需要能够从CC中提取数字。

  

" A5 S LINE BLACK EDITION PLUS TDI 190(2 DOOR),1968cc,2015 -   PRESENT"

鉴于字符串的长度可以改变,有没有办法用子字符串来做到这一点,所以例如总是从cc之前抓取数字而没有前面的空格?还要记住,这有时可以是3位数字或4位数字。

4 个答案:

答案 0 :(得分:4)

这就是诀窍:

- @articles.each do |article|
  .article
     - if article.last_comment.present?
       %comment= article.last_comment.text

它会捕获string input = "A5 S LINE BLACK EDITION PLUS TDI 190 (2 DOOR), 1968cc, 2015 - PRESENT"; string size; Regex r = new Regex("(\\d*)cc", RegexOptions.IgnoreCase); Match m = r.Match(input); if (m.Success) { size = m.Groups[0]; }

之前的每个数字

答案 1 :(得分:4)

如果逗号计数没有改变,您可以执行以下操作:

string s = "A5 S LINE BLACK EDITION PLUS TDI 190 (2 DOOR), 1968cc, 2015 - PRESENT";
string ccString = s.Split(',').ToList().Find(x => x.EndsWith("cc")).Trim();
int cc = Int32.Parse(ccString.Substring(0, ccString.Length - 2));

答案 2 :(得分:0)

这是另一种解决方案:

string text = "A5 S LINE BLACK EDITION PLUS TDI 190 (2 DOOR), 1968cc, 2015 - PRESENT";
string[] substrings = text.Split(',');  
string numeric = new String(substrings[1].Where(Char.IsDigit).ToArray());
Console.WriteLine(numeric);  

这是一个有效的DEMO

答案 3 :(得分:0)

您可以使用正则表达式匹配带有字符串的模式 - 因此您可以返回与给定模式匹配的字符串部分。此正则表达式模式将尝试匹配符合以下模式的字符串部分:

\d{1,5} *[cC]{2}
  • 从1到5位\d{1,5}开始(对于引擎cc值似乎合理!)
  • 然后可以在其与cc *
  • 之间包含0个或更多空格
  • 以2 C或c [cC]{2}
  • 的任意组合结束

所以你可以用以下方式使用它:

string str = "A5 S LINE BLACK EDITION PLUS TDI 190 (2 DOOR), 1968cc, 2015 - PRESENT";
Match result = Regex.Match(str, @"\d{1,5} *[cC]{2}");
string cc = result.Value; // 1968cc