2016-08-11 3 views
-2

Мне нужно проанализировать файл данных. Я хочу использовать регулярное выражение (.net) и начал с этим выражением:Regex должен соответствовать двоичным данным

#mux:(?<mux>[a-z0-9 ]+)#|#curr: (?<curr>\d+)#|#pot:(?<pot>\d+)#|#data#(?<data>\w+)#EOC# 

Моего содержимым файла данные выглядят как:

#pot: 80##curr: 200##mux: rp 0 1 rn 0 2##data# ... binary data ... #EOC# 

Это прекрасно работает, пока мои данные 888, например, но мои данные состоят из двоичных данных, поэтому как я могу это сделать в regex? Мне просто нужна конструкция, а не \w+ в моем шаблоне данных, которая точно соответствует любому символу или байту.

Большое спасибо за помощь.

+0

regex's не предназначены для сырых двоичных данных, они предназначены для строк. –

+0

вы можете использовать. чтобы соответствовать любой вещи. – elyashiv

+0

Это не ясный вопрос, но, возможно, '(? [^ #] +)' это то, что вам нужно. Else, используйте '(? (? S:. +?))', Чтобы соответствовать * любому * одному или нескольким символам, но как можно меньше. –

ответ

0

Я предлагаю использовать ленивый точечный шаблон .*? с RegexOptions.Singleline вариант:

#mux:(?<mux>[a-z0-9 ]+)#|#curr: (?<curr>\d+)#|#pot:(?<pot>\d+)#|#data#(?<data>(?s:.*?))#EOC# 
                       ^^^^^^^^ 

См regex demo

Это будет найдено 0+ символов как можно (до первого) #EOC#.

+0

THAAAAANKS, попробуйте. – Gerhard

+0

Я использовал группу встроенных модификаторов '(? S: ...)', но вы можете просто заменить '(? (? S:. *?))' With '(? . *?)', Но тогда вы необходимо передать флаг 'RegexOptions.Singleline' в' Regex.Match'. –