假设我的源代码中包含以下内容,并且我只想返回字符串中的数字:
源代码来自一个网站,只是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",
);
答案 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
}
}
}
我希望这有帮助。