我是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=63
或RLs=1
EDIT2
我的TCP客户端的回调是错误的...正则表达式部分工作正常。因此,我的问题最终变得无关紧要。抱歉!无论如何,感谢您的所有快速回复:)
答案 0 :(得分:1)
您的字符串似乎包含退格字符,因为打印输出为
EditString("RLs=6" + (char)8 + "3" + (char)8 + "1");
与您所写的完全相同:
RLs=1
RLs=
631
如果要过滤掉这些字符,可以将其用作第一步:
response = response.Replace("\b", "");