在C#中以特定字符串格式提取double的方法?

时间:2014-10-15 09:12:07

标签: c# string

我们有格式hello_EP_-12.5_201414welcome_EP_22.5_20345

的字符串输入

我们必须从上面的字符串中提取双值-12.522.5。格式*_EP_double_*已修复。

提取的一种方法是使用'_'拆分字符串并将字符串放在'EP'旁边并转换它。另一种方法是使用正则表达式,我们提取小数值部分。还有其他有效的方法吗?

3 个答案:

答案 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+

http://regex101.com/r/dN8sA5/17

答案 2 :(得分:0)

不是更好,但我没有看到类似的东西有什么问题:

 var parts = s.Split(new[] {"_EP_"}, StringSplitOptions.None);
 string dString = parts[1].Substring(0, parts[1].IndexOf('_'));
 double d = double.Parse(dString);