2012-07-18 60 views
0

我正在使用port.ReadExisting()從c#中的GSM調制解調器讀取來電。我將讀取的數據存儲在字符串變量s中。現在我想比較傳入的數據與正則表達式。但時間條件永遠不會被執行。請提供更正。正則表達式中的更正請

端口傳入的數據是

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; 
        } 
       } 

回答

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; 
} 

我跳過任何字符除了 '+' 第一:[^\+]*

+0

謝謝Ria ..完美的工作。乾杯!! – Cdeez 2012-07-18 09:39:22

1

我認爲,應該有之間兩個新行+匹配「RING」和+ CLIP 。所以這個正則表達式應該是\ r \ n(。+)\ r \ n \ r \ n + CLIP:...

否則,這應該是一個簡單的問題來調試 - 只需開始替換越來越大的部分,從前面或後面開始,以「。」。一旦它開始匹配,你就知道你剛喂入的部分。是導致問題的部分。

1

使用以下正則表達式:

「RING [^ \ +] \ + CLIP:\ S \ 「(?[^ \」] )\ 「(\ d +),\ 」([^ \「])\」,(\ W *),\「(\ W *) \「,(\ w *)」

相關問題