C# 正则表达式,仅返回数字

本文关键字:返回 数字 正则表达式 | 更新日期: 2023-09-27 17:56:47

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

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

如: 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", 
    );

C# 正则表达式,仅返回数字

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

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

会给你"13|100|0".

或者对斯皮农的回答略有改进:

// '- 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]));

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

Regex.Replace("g;13|g;100|g;0", "[^0-9|]", "");
在这种情况下,

正则表达式可能矫枉过正。鉴于|;的统一划分,我建议String.Split().然后,您可以再次拆分或使用String.Replace()来摆脱多余的字符(即 g; )。

看起来你有很多解决方案,但我会再提出一个解决方案,如果你愿意,你可以在比赛中迭代每个组,以获得数字。

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
      } 
   }
}

我希望这是有帮助的。