格式化所有出现的0到0.00(使用C#正则表达式)

时间:2012-03-14 19:21:00

标签: c# regex

我有一些逗号分隔的数据如下:

John, Dog, 0, 00, 0, 0.00, 123

我希望0有2位小数.. 输出应为:

John, Dog, 0.00, 0.00, 0.00, 0.00, 123

有办法做到这一点吗?

我故意在使用逗号之前留下了随机空格。

4 个答案:

答案 0 :(得分:4)

回应我的评论。在不使用正则表达式的情况下解决这个问题很简单。

string input = "John, Dog, 0, 00, 0, 0.00, 123";
string[] items = input.Split(",");

for (int i = 0; i < items.Length; i++)
{
    string value = items[i].Trim();
    int converted;

    if (int.TryParse(value, out converted))
    {
        if (converted == 0)
        {
            items[i].Replace(value, "0.00");
        }
    }        
}

string output = string.Join(items, ",");

答案 1 :(得分:0)

这是另一个不使用正则表达式的简单解决方案。

string input = "John, Dog, 0, 00, 0, 0.00, 123";
string[] items = input.Split(",");

for (int i = 0; i < items.Length; i++)
{
    int intValue;
    if (Int32.TryParse(items[i].Trim(), out intValue))
    {
        if (intValue == 0)
            items[i] = intValue.ToString("f2");
    }
}

string output = string.Join(items, ", ");

答案 2 :(得分:0)

这是一个应该处理基本上所有东西的例子:

Regex.Replace("John, Dog0, D0g, 0Dog, 10, 10.0, 00, 0, 0.00, 0.0, 0.000, 00.00, 123",
         @"(?<=,\s*|^)0+(\.0*)?(?=\s*,|$)", "0.00")

输出:

John, Dog0, D0g, 0Dog, 10, 10.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 123

正则表达式的解释:

(?<=,\s*|^) # after either a comma or the start of a string
0+          # match at least one '0'
(\.0*)?     # match an optional fractional part
(?=\s*,|$)  # must be before a comma of the end of the string

答案 3 :(得分:0)

这似乎在快速测试中起到了作用:

using System.Text.RegularExpressions;

Regex regex = new Regex( "\\b(?:0|\\.)+\\b" );

string input = "John, Dog,0, 00,000.0000, 0, 0.00, 123, 007,0";
string result = regex.Replace( input, "0.00");

我们只是在字边界上查找任何连续的零和句点字符串,并替换为“0.00”。因此,对于诸如“0.0 ... 000”之类的无效数据,它将会下降,但也许这是可以接受的。