C#Regular Expression仅返回数字

时间:2011-05-19 00:08:08

标签: c# regex

假设我的源代码中包含以下内容,并且我只想返回字符串中的数字:

源代码来自一个网站,只是fyi,我已经解析了它以便它进入程序,但后来我需要实际解析这些数字以返回我想要的内容。只是有一段时间试图弄明白:(

喜欢:13 | 100 | 0;

我怎么能写这个正则表达式?

    var cData = new Array(
        "g;13|g;100|g;0", 
        "g;40|g;100|g;1.37", 
        "h;43|h;100|h;0", 
        "h;27|h;100|h;0", 
        "i;34|i;100|i;0", 
        "i;39|i;100|i;0", 
    );

4 个答案:

答案 0 :(得分:3)

不确定你真的需要正则表达式。

var str = "g;13|g;100|g;0";
str = str.Replace("g;", "");

会给你"13|100|0"

或者对于spinon的回答略有改进:

// \- included in case numbers can be negative.  Leave it out if not.
Regex.Replace("g;13|g;100|g;0", "[^0-9\|\.\-]", "");  

或使用拆分和加入的选项:

String.Join("|", "g;13|g;100|g;0".Split('|').Select(pipe => pipe.Split(';')[1]));

答案 1 :(得分:2)

我会使用这样的东西,所以你只保留数字和分隔符:

Regex.Replace("g;13|g;100|g;0", "[^0-9|]", "");

答案 2 :(得分:0)

在这种情况下,正则表达式可能有点矫枉过正。鉴于|;的统一分隔,我建议String.Split()。然后您可以再次拆分或使用String.Replace()删除额外的字符(即g;)。

答案 3 :(得分:0)

看起来你有很多解决方案,但是如果你愿意的话,我会在一个匹配中迭代每个组以获取数字。

Regex regexObj = new Regex(@"\w;([\d|.]+)\|?");
Match matchResults = regexObj.Match("g;13|g;100|g;0");
if( matchResults.IsMatch )
{
   for (int i = 1; i < matchResults.Groups.Count; i++) 
   {
      Group groupObj = matchResults.Groups[i];
      if (groupObj.Success) 
      {
         //groupObj.Value will be the number you want
      } 
   }
}

我希望这有帮助。