请正常表达更正

时间:2012-07-18 05:18:42

标签: c# regex

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

3 个答案:

答案 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 *)“