替换相同值的返回2?

时间:2011-07-28 19:26:06

标签: c# regex replace richtextbox

我有一个问题,为什么会这样。首先,我将解释发生了什么。我在RichTextBox中找到一行并取Split值,并用相同的值替换它,但带有小数限制。这是我的文件的样子:

J6   INT-00113G  227.905  174.994    180   SOIC8
J3   INT-00113G  227.905  203.244    180   SOIC8
U13  EXCLUDES    242.210  181.294    180   QFP128

但由于某种原因,当我尝试更换并输出它时,我得到了这个... (数字在第3和第4列中出现两次)

J6   INT-00113G  227.91227.91   174.99174.99     180   SOIC8
J3   INT-00113G  227.91227.91   203.24203.24     180   SOIC8
U13  EXCLUDES    242.21242.21   181.29181.29     180   QFP128

这里是我的代码......做这件事的错误是什么?

string[] myLines = placementTwoRichTextBox.Text.Split('\n');
foreach (string line in myLines)
{
    // Matches the entire line.
    Match theMatch = Regex.Match(line, @".*");

    if (theMatch.Success)
    {
        // Stores the matched value in string output.
        string output = theMatch.Value;

        // Replaces tabs and extra space with only 1 space delimiter
        output = Regex.Replace(output, @"\s+", " ");

        // Splits the specified regex into two different regexs.
        var componentItem = output.Split(' ');

        double d1 = Convert.ToDouble(componentItem[2]);
        double d2 = Convert.ToDouble(componentItem[3]);
        double round1 = Math.Round(d1, 2, MidpointRounding.AwayFromZero);
        double round2 = Math.Round(d2, 2, MidpointRounding.AwayFromZero);

        componentItem[2] = Regex.Replace(componentItem[2], @".*", round1.ToString());
        componentItem[3] = Regex.Replace(componentItem[3], @".*", round2.ToString());

        // Sets the RichTextBox to the string output.
        newPl2ItemsRichTextBox.AppendText(componentItem[0] + "   " + componentItem[1] + "   " + componentItem[2] +
            "   " + componentItem[3] + "   " + componentItem[4] + "   " + componentItem[5] + "\n");
    }
}

有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:2)

而不是完成所有这些,只需进行拆分,因为您知道索引2和3包含您的数字......只需执行以下操作:

newPl2ItemsRichTextBox.AppendText(componentItem [0] +“”+ componentItem [1] +“”+ Math.Round(Convert.ToDouble(componentItem [2]),2)+“”+ Math.Round(Convert.ToDouble (componentItem [3]),2)+“”+ componentItem [4] +“”+ componentItem [5] +“\ n”);

避免所有其他步骤,只需拆分并打印。

答案 1 :(得分:1)

你的表达“。*”点击两场比赛: 尝试使用以下代码重现:

static void Main(string[] args)
    {
        Regex regex = new Regex(@".*");
        MatchCollection matches = regex.Matches("  227.905  ");
        foreach (var match in matches)
        {
            Console.WriteLine("[{0}]", match);
        }
        Console.ReadKey();
    }

匹配是: “227.905”和 “”

答案 2 :(得分:0)

回答你的问题: 在227.905中间有一个点可能让替换函数在227和905上工作。这就是为什么圆角数被插入两次。