我正在使用port.ReadExisting()读取串口,以便从c#中的GSM调制解调器读取来电。我将读取数据存储在字符串变量s中。现在我想将传入的数据与正则表达式进行比较。但是while条件永远不会被执行。请提供更正。
端口上的传入数据是
RING
+CLIP: "+919030665834",145,"",,"",0
我写了以下代码:
string s = port.ReadExisting();
Regex r = new Regex(@"\r\n(.+)\r\n\+CLIP: ""\+(\d+)"",(.+),""(.*)"",(.*),""(.*)"",(\d+)\r\n");
Match m = r.Match(s);
while (m.Success)
{
if (s.Contains("\r\nRING\r\n"))
{
call_status.Text = "Incoming Call";
call_status.Visible = true;
status_phno.Text = m.Groups[1].Value;
}
}
答案 0 :(得分:1)
我认为。+匹配" RING"之间应该有两个换行符。和+ CLIP。所以正则表达式会读取\ r \ n(。+)\ r \ n \ r \ n + CLIP:...
否则,这应该是一个容易调试的问题 - 只需从正面或背面开始用"。"开始替换越来越大的部分。一旦它开始匹配,你知道你刚刚输入的部分。就是引起问题的部分。
答案 1 :(得分:1)
使用这个:
var match = Regex.Match(inputString, "RING[^\\+]*\\+CLIP:\\s*\"(?<phone>[^\"]*)\",(\\d+),\"([^\"]*)\",(\\w*),\"(\\w*)\",(\\w*)");
if(match.Success && inputString.Contains("RING"))
{
var phoneNumber = match.Groups["phone"].Value;
}
我跳过任何字符,除了&#39; +&#39;第一:[^\+]*
答案 2 :(得分:1)
使用以下正则表达式:
“RING [^ \ +] \ + CLIP:\ S \”(?[^ \ “] )\”,(\ d +),\“([^ \ “] )\”,(\ W *),\ “(\ W *)\”,(\ W *)“