簡體   English   中英

需要幫助的正則表達式解析器-C#

[英]Need help with a regular expression parser - C#

我正在開發一個程序,該程序從串行端口讀取二進制數據流,並且需要解析和格式化輸入。

數據會不斷讀取,需要顯示為完整字符串。 每個字符串的3個字節的“開始代碼”和3個字節的“結束代碼”。 我需要編寫一個解析器,該解析器將根據開始和結束代碼查找數據-我假設正則表達式解析器是實現此目的的方法。

在過去的一兩天內,我讀了一堆正則表達式,但這只是不單擊。 救命?

起始碼:0x16 <0x02(不會用空格分隔)結束碼:0x03> 0x17(不會用空格分隔)

有人可以給正則表達式找到這些值嗎? 並有一種方法可以在c#中找到它們而不將其從字符串中刪除(即,不考慮它們在String.Split()中的普通定界符)嗎?

如果只是簡單地匹配幾個字節值,那么您可以考慮編寫一個簡單的有限狀態機以匹配開始和結束。 更易於測試和表示為代碼。

我認為在這種情況下,正則表達式會顯得過分殺傷力。 我只是在數據字節到達時緩沖它們,在接收到每個字節之后,檢查是否以您的結束代碼結尾。 大概是這樣的(動態編寫,而不僅僅是粘貼和編譯):

var buffer=new List<byte>();
var endCode=new byte[] {3, '>', 0x17};

// In a loop:

byte? received=ReceiveByte(); //Return null if no new byte available
if(byte.HasValue) {
  buffer.Add(received);
  if(buffer.Skip(buffer.Count()-endCode.Length).Take(endCode.Length).SequenceEqual(endCode){
    //Process the received data in buffer
    buffer.Clear();
  }
}

.NETRegex處理Unicode字符串。 處理二進制數據字節時, Regex將需要某種形式的解碼為Unicode 保留為字節數組的數據不適合Regex使用。 查找有意義的(對於您的數據) Encoding ,或者忘記正則表達式引擎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM