从字符串中提取数字

时间:2011-08-24 14:21:34

标签: c# .net string split

我正在尝试操纵一个字符串..

例如:

string DiagnosesString  "250.00 03 350.0001 450.00 01 550.00 02";

输出

250.00
350.00
450.00
550.00

我尝试使用Split方法。正如您在350.0001中的示例中所看到的,其输出为350.00。

我可以删除03,02等。

问题: 1.)我如何删除350.0001的o1只获得350.00?

这是我的代码:

string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

12 个答案:

答案 0 :(得分:5)

var DiagnosisCodesParts =
    DiagnosesString.Split(' ')
                   .Where(s => !s.StartsWith("0"))
                   .Select(s => Decimal.Parse(s))
                   .Select(d => d.ToString("0.00");

答案 1 :(得分:3)

如何做一个Decimal.TryParse并格式化十进制数。这也将清除坏的价值。

string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02"; 
var diagnoses = DiagnosesString.Split(' ');
foreach(var diagnosis in diagnoses)
{
  decimal temp;
  if(diagnosis.Contains(".") && Decimal.TryParse(diagnosis, out temp))
  {
    // do something
    var value = temp.ToString("0.00");
  }
}

答案 2 :(得分:2)

如果您正在处理数值,我建议将它们解析为实际的数字类型,例如使用Decimal.ParseDecimal.TryParse。然后,您可以使用格式将其转换回字符串,例如myNumber.ToString("N2")

答案 3 :(得分:2)

您可以将它们解析为double。我喜欢使用XmlConvert

foreach (var s in diagnosisCodesParts)
{
    var d = XmlConvert.ToDouble(s);
    Console.WriteLine(string.Format({0:2}, d));
}

答案 4 :(得分:1)

尝试在空间上进行aplitting。

string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " "); 
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split(' '); 

这应生成一个包含值的数组,您可以根据需要进行筛选。然后,您可以将值转换为十进制并舍入为2位以删除额外值。

答案 5 :(得分:1)

您可以使用正则表达式匹配数字

/\d+\.\d+/

但这取决于您是否可以更准确地定义您的号码。

decimal number;
string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02";

foreach(var num in Regex.Matches(DiagnosesString, @"\d+\.\d+"))
{
    Decimal.TryParse(num.ToString(), out number);
    Console.WriteLine(number.ToString("0.00"));
}

可能你甚至需要这样的正则表达式:

/(\d+.\d\d)\d*/

仅匹配格式为0.00的数字...您应该提供更多数据来解析数据...

答案 6 :(得分:1)

1)将字符串转换为小数 2)将小数舍入到小数点后2位 3)将其转换回字符串

答案 7 :(得分:1)

string DiagnosesString =“250.00 03 350.0001 450.00 01 550.00 02”;

string DiagnosisCodestemp = DiagnosesString.Replace(“01”,“”)。Replace(“02”,“”)。Replace(“03”,“”)。Replace(“04”,“”).Replace( “05”,“”)。替换(“06”,“”)。替换(“07”,“”);

        string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

        foreach (var item in DiagnosisCodesParts)

        {

            string[] parts = item.Split('.');
            string num = parts[1];
            if (num.Length > 2)
            {
                num = num.Replace(num, "00");
            }

        }

答案 8 :(得分:1)

好的,我不确定我完全理解你的问题,但我会试试。

  1. 你之前已经分手了。
  2. 您过滤/忽略长度为2或更短的所有字符串。
  3. 您将数组中剩余的字符串转换为double。
  4. 在这一点之后将这些值四舍五入为2个数字。

答案 9 :(得分:1)

您需要将字符串转换为数字值,我选择小数,因为它不会像double或float那样丢失精度。然后,您可以使用格式字符串说明符将其转换为所需的十进制格式:

var list = List<string>();
foreach(var s in splitString) {

  // code to rule out 02, 01, etc. goes here

  decimal tmp;
  if (decimal.TryParse(s, out tmp)) {
     var code = tmp.ToString("0.00");
     list.Add(code);
  } else {
     // something went wrong, handle it here
  }
}

答案 10 :(得分:1)

using System;
using System.Text.RegularExpressions;
class Program
{
    static void Main()
    {
        string input = "250.00 03 350.0001 450.00 01 550.00 02";
        Match match = Regex.Match(input, @"[0-9]+[/.][0-9]+", RegexOptions.IgnoreCase);
        while (match.Success) 
        {
            string key = match.Value;
            Console.WriteLine(String.Format("{0:0.00}", Convert.ToDecimal(key, new CultureInfo("en-US"))));
            match = match.NextMatch();
        }
    }
}

答案 11 :(得分:1)

列表列表=新列表();

       string DiagnosesString  =  "250.00 03 350.0001 450.00 01 550.00 02";

       string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");

        string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

        foreach (var item in DiagnosisCodesParts)

        {

            string[] parts = item.Split('.');
            string num = parts[1];
            string finalValue = string.Empty;

            if (num.Length > 2)
            {
                num = num.Replace(num, "00");
                finalValue =  parts[0]+"."+num;
            }
            else
            {
                finalValue = parts[0] + "." + num;
            }

            list.Add(finalValue);
        }

o / p:250.00 350.00 450.00 550.00