只返回数字的C#正则表达式
假设我的源代码中包含以下内容,我只想返回字符串中的数字: 源代码来自一个网站,仅供参考,我已经将其解析出来,以便它进入程序,但我需要实际解析这些数字以返回我想要的。只是有一段很糟糕的时间想弄明白( 比如:13 | 100 | 0 我怎么写这个正则表达式只返回数字的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
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你是对的。你知道,因为所有其他选项看起来都一样,所以我甚至没有注意到第二个选项中的小数。我忘记了管道中的转义。我实际上在一个简单的正则表达式测试仪中进行了测试,我没有考虑它。谢谢你指出这一点。