2015-10-10 4 views
1

Я пытаюсь найти лучший способ захвата пакетов данных, присутствующих в строке, которая также содержит нежелательные символы. Пакеты данных в шестнадцатеричном виде, обычно сгруппированные в байты с промежуточным промежутком между пробелами. Пакеты имеют разную длину и ограничены в начале и в конце «10» и «10 03» соответственно. Таким образом, немного текста с пакетом в нем может выглядеть следующим образом:Захват шестнадцатеричных пакетов данных с регулярными выражениями

gibberish 10 01 23 AB CD EF 10 03 gibberish 

я могу получить регулярное выражение, чтобы захватить строку шестнадцатеричных байт достаточно легко, но без учета разделителей несколько шестигранных пакеты могут стать одним , или нежелательные символы в начале или конце, которые выглядят как hex, могут быть объединены с пакетом. Как я могу получить регулярное выражение для учета разделителей?
Я могу думать об этом вокруг без использования регулярных выражений, но это не похоже, что это будет так же эффективно.

+3

Показывать, что вы используете сейчас и как это не работает –

+0

Если вы хотите, чтобы регулярное выражение захватывало шестнадцатеричную часть, я думаю, вы можете использовать регулярное выражение, подобное '10 \ s * (([\ dA-F] {2 }) +) \ s * 10 03';). –

ответ

0

Как правило, тарабарщина в начале относится к адресу памяти. Это непрерывная строка, без какого-либо белого пространства. Следовательно, используйте \S+, чтобы зафиксировать это.

Так как шестигранные данные будут разграничены 10 в начале и 10 03 в конце концов, их использовать:

^\S+ (10 (?:[0-9a-f]{2})+10 03) 

демонстрационный at regex101.

PS: Вам нужно будет использовать флаг RegexOptions.IgnoreCase.

+0

Это похоже на трюк. То, что у меня было очень похоже, но я не был знаком с концепцией «не захватывающей группы». и таким образом пропустил это. – CLH

Смежные вопросы