我有线,我需要用它们做替身。它们的格式都是:
"Blabla 11/moreBla 17-18" That should become 11.1718
"Blabla 7/moreBla 8-9" --> 7.89
"Blabla 4/moreBla 6-8" --> 4.68等。
也可以有额外的空格或破折号,也可以是正斜杠。所以,任何类似的东西:
"Blabla 11/moreBla 17-18"
"Blabla 11 / moreBla 17-18"
"Blabla 11/moreBla 17/18"
"Blabla 11/moreBla 17 / 18"
"Blabla 11 / moreBla 17 / 18"我首先尝试了拆分字符串,但显然还有其他所有的情况。因此,split在这里不能很好地工作。也许RegEx能帮上忙?
发布于 2012-08-29 01:06:19
代码:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "Blabla 11/moreBla 17-18";
string[] s = input.Split('/');
Console.WriteLine(Regex.Replace(s[0], @"[^\d]", "") + "." + Regex.Replace(s[1], @"[^\d]", ""));
}
}输出:
11.1718测试这段代码here。
或者这段代码:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "Blabla 11/moreBla 17-18";
string[] s = Regex.Replace(input, @"[^\d\/]", "").Split('/');
Console.WriteLine(s[0] + "." + s[1]);
}
}输出:
11.1718测试这段代码here。
发布于 2012-08-29 01:06:03
根据您在问题中给出的测试用例:
string input = @"Blabla 11/moreBla 17/18";
MatchCollection matches = Regex.Matches(input, "(\\d+)");
double val = Convert.ToDouble(matches[0].Value + "." + matches[1].Value + matches[2].Value);发布于 2012-08-29 00:55:13
尝尝这个
(\d+).+?(\d+).+?(\d+)将其替换为
\1.\2\3基本上,它匹配第一组数字并将其放入整数部分,然后匹配第二组和第三组数字,无论它们之间是什么,并生成小数部分。
c#代码应该是
public double MatchNumber(string input){
Regex r = new Regex(@"(\d+).+?(\d+).+?(\d+)");
Match match = r.Match(input);
if (match.Success){
return Convert.toDouble(
match.Groups[1].Value+"."+
match.Groups[2].Value+
match.Groups[2].Value);
}
else{
return null;
}
}https://stackoverflow.com/questions/12163810
复制相似问题