[英]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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.