正则表达式不会覆盖旧值



我是正则表达式的新手,我几乎已经让它工作了。我想我犯了一个小菜鸟错误,我已经浏览了文档。

我有一个小脚本,我运行两次,每次运行不同的字符串。第一个字符串执行我想要的操作。第二个没有。不知何故,第一次运行的旧值似乎放在第二次运行后的值前面。最好在我展示我的代码和输出时进行解释。

原始脚本,其中 TCP 客户端回调应首先给出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

编辑2

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

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

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

和你写的完全一样:

RLs=1
RLs=
631

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

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

最新更新