我们有格式hello_EP_-12.5_201414
,welcome_EP_22.5_20345
等
我们必须从上面的字符串中提取双值-12.5
,22.5
。格式*_EP_double_*
已修复。
提取的一种方法是使用'_'拆分字符串并将字符串放在'EP'旁边并转换它。另一种方法是使用正则表达式,我们提取小数值部分。还有其他有效的方法吗?
答案 0 :(得分:2)
尝试:
string input = "hello_EP_-12.5_201414";
int start = input.IndexOf("_EP_") + "_EP_".Length;
int length = input.IndexOf('_', start + 1) - start;
double d;
double.TryParse(input.Substring(start, length), out d);
答案 1 :(得分:1)
我总是喜欢这个正则表达式从字符串
中提取双号(-)?\d+\.\d+
它没有像*_EP_double_*
http://regex101.com/r/dN8sA5/16
但是在你的情况下,你想要提取_EP_
之后的双精度数,并且在这个测试用例12.4345_hello_ES_34.5_4444
中你需要34.5,那么你必须使用
(?<=_EP_)(-)?\d+\.\d+
答案 2 :(得分:0)
不是更好,但我没有看到类似的东西有什么问题:
var parts = s.Split(new[] {"_EP_"}, StringSplitOptions.None);
string dString = parts[1].Substring(0, parts[1].IndexOf('_'));
double d = double.Parse(dString);