2016-12-07 206 views
1

我接收從某個部件看起來字符串響應:是使用正則表達式優於字符串分割

"RX,993-756-V01 ver 02a ,4A7DF39B,124-412,0,0,0,1,8002,S, ,993-760-V01 ver 01b" 

,並使用一個簡單的字符串分隔符分割爲一個字符串[]的響應和枚舉來檢索內容。

char[] separator = { ',', '\r' }; 
string[] data = rxBuffer.Split(separator); //rxBuffer has the string response 

現在的數據對象應包含:

data[0] = RX 
data[1] = 993-756-V01 ver 02a 
data[2] = 4A7DF39B.. so on 

我想知道是否有更有效的方式比這(爲前:使用正則表達式)我在哪裏可以查詢整個響應並將每個條目解析爲單獨的變量。

i.e., data[1] into a variable called SWVersion property etc. 
+6

正則表達式從來沒有比簡單分割更高效。 –

+1

在C#中解構尚不可用。但是,您可以使用正則表達式匹配結果獲取字典。 –

+0

@WiktorStribiżew:是的,我意識到這一點,但是想知道它是否真的有效,如上面 –

回答

1

正則表達式是字符串分析問題的重量級解決方案。它基於一個從原始表達式構建的狀態機。如果你可以編譯一次正則表達式,然後連續多次使用它,這取決於你正在解決的問題,它會變得更好。

另一方面,從實現的角度來看,字符串拆分幾乎是微不足道的。它歸結爲識別輸入每個位置處的分隔符,並決定是啓動新的輸出元素還是將當前位置推送到最後一個輸出元素。這比正則表達式執行得更快。

從功能的角度,字符串分割也更好,因爲你可以申請LINQ庫鏈整個數據處理成一個語句:

rxBuffer.Split(separator) 
    .Select(s => s.Trim()) 
    .Where(s => !s.IsNullOrEmpty()) 
    .GroupBy(s => s.Substring(0, 3)) 
    ... 

這僅僅是一個可能的分析過濾掉空的例子字符串和其餘的前三個字母分組。你不會在正則表達式中獲得如此簡單,也不會獲得速度。

相關問題