只返回数字的C#正则表达式

只返回数字的C#正则表达式,c#,regex,C#,Regex,假设我的源代码中包含以下内容,我只想返回字符串中的数字: 源代码来自一个网站,仅供参考,我已经将其解析出来,以便它进入程序,但我需要实际解析这些数字以返回我想要的。只是有一段很糟糕的时间想弄明白( 比如: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;2

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

源代码来自一个网站,仅供参考,我已经将其解析出来,以便它进入程序,但我需要实际解析这些数字以返回我想要的。只是有一段很糟糕的时间想弄明白(

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

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

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

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

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

在这种情况下,正则表达式可能有点过头了。考虑到
的统一划分,我建议使用
String.Split().

在这种情况下,正则表达式可能有点过头了。考虑到
的统一划分,我建议使用
String.Split()
。然后您可以再次拆分,或者使用
String.Replace()
来去除额外的字符(即
g;
).

我会使用类似的方法,以便您只保留数字和分隔符:

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

我会使用类似的方法,这样您只保留数字和分隔符:

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

看起来你有很多解决方案,但我会再加入一个,你可以在匹配中迭代每个组,如果你想的话,得到数字

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
      } 
   }
}
Regex regexObj=new Regex(@“\w;”([\d|.]+)\\\\?”;
Match matchResults=regexObj.Match(“g;13 | g;100 | g;0”);
if(matchResults.IsMatch)
{
对于(int i=1;i

我希望这会有所帮助。

看起来您有很多解决方案,但我会再添加一个,您可以在匹配中迭代每个组,以获得数字(如果您愿意)

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
      } 
   }
}
Regex regexObj=new Regex(@“\w;”([\d|.]+)\\\\?”;
Match matchResults=regexObj.Match(“g;13 | g;100 | g;0”);
if(matchResults.IsMatch)
{
对于(int i=1;i

我希望这会有所帮助。

唯一的问题是我不总是知道每个管道中的第一个字母是什么。这就是为什么我认为我需要一个正则表达式。唯一的问题是我不总是知道每个管道中的第一个字母是什么。这就是为什么我认为我需要一个正则表达式。我认为
字符需要转义,这将导致p第二个例子中的小数点也是一样。@Andrew你是对的。你知道,因为所有其他选项看起来都一样,我甚至没有注意到第二个选项中的小数点。我忘记了管道中的逃逸。我实际上在一个简单的正则表达式测试仪中进行了测试,我没有考虑它。谢谢你指出它。我认为
字符需要转义,这也会去掉第二个示例中的小数。@Andrew你是对的。你知道,因为所有其他选项看起来都一样,所以我甚至没有注意到第二个选项中的小数。我忘记了管道中的转义。我实际上在一个简单的正则表达式测试仪中进行了测试,我没有考虑它。谢谢你指出这一点。