0

我正在使用 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;  
                    }  
                 }
4

3 回答 3

1

我相信.+匹配“RING”和+CLIP之间应该有两个换行符。所以正则表达式将读取 \r\n(.+)\r\n\r\n+CLIP: ...

否则,这应该是一个容易调试的问题——只需开始用“. ”替换越来越大的部分,从前面或后面开始。一旦它开始匹配,你就知道你刚刚输入 . 是导致问题的部分。

于 2012-07-18T05:31:08.203 回答
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;
}

我首先跳过了除“+”之外的任何字符:[^\+]*

于 2012-07-18T05:47:50.047 回答
1

使用以下正则表达式:

"RING[^\+] \+CLIP:\s \"(?[^\"] )\",(\d+),\"([^\"] )\",(\w*),\ "(\w*)\",(\w*)"

于 2012-07-18T12:12:24.283 回答