正则表达式不会覆盖旧值

时间:2018-08-14 09:13:42

标签: c# regex

我是Regex的新手,几乎可以使用它了。我认为我犯了一个小菜鸟错误,而且我已经浏览了文档。

我有一个小脚本,我运行两次,每次输入不同的字符串。第一个字符串满足我的要求。第二个没有。以某种方式,似乎第一次运行的旧值放在第二次运行之后的值之前。最好解释一下我何时显示代码和输出。

TCPclient回调应首先给出BS=63,然后给出RLs=1的原始脚本。

private void Main()
{
    EditString(TCPclientCallback1);
    EditString(TCPclientCallback2);
}

private void EditString(string response)
{
    Regex rgxLetters = new Regex(@"[\d]");
    Regex rgxNumbers = new Regex(@"[^\d]");
    Console.WriteLine(response);
    Console.WriteLine(rgxLetters.Replace(response, ""));
    Console.WriteLine(rgxNumbers.Replace(response, ""));
    Console.WriteLine();
}

输出

BS=63
BS=
63

RLs=1
RLs=
631

最后一个值必须是1,而不是631。在下一个示例中,我手动插入所需的字符串。

private void Main()
{
    EditString("BS=63");
    EditString("RLs-1");
}

private void EditString(string response)
{
    Regex rgxLetters = new Regex(@"[\d]");
    Regex rgxNumbers = new Regex(@"[^\d]");
    Console.WriteLine(response);
    Console.WriteLine(rgxLetters.Replace(response, ""));
    Console.WriteLine(rgxNumbers.Replace(response, ""));
    Console.WriteLine();
}

输出。这是期望的输出

BS=63
BS=
63

RLs=1
RLs=
1

这意味着正则表达式部分没有问题。 在我的应用程序中,我从TCP客户端的回调中获取了response。因此,以某种方式,回调并不完全是BS=63RLs=1

EDIT2

我的TCP客户端的回调是错误的...正则表达式部分工作正常。因此,我的问题最终变得无关紧要。抱歉!无论如何,感谢您的所有快速回复:)

1 个答案:

答案 0 :(得分:1)

您的字符串似乎包含退格字符,因为打印输出为

EditString("RLs=6" + (char)8 + "3" + (char)8 + "1");

与您所写的完全相同:

RLs=1
RLs=
631

如果要过滤掉这些字符,可以将其用作第一步:

response = response.Replace("\b", "");