2016-12-07 1 views
0

У меня есть текстовый файл с шестнадцатеричными представленными числами. Эти числа разделяются или space или new line через 16bits куски, как это:Проложить пробел после двух последовательных символов [0-9] [A-F] [a-f]

1822 0000 da12 
0030 0110 0030 

Я хочу их в группы снова, но в 8bit куски, как это:

18 22 00 00 da 12 
00 30 01 10 00 30 

Я использую «Sublime Text 3 ", который поддерживает поиск и замену регулярных выражений. К сожалению, мои знания регулярных выражений довольно бедны. Поиск Google не помог.

ответ

4

Заменить ([0-9a-f]{2})([0-9a-f]{2}) на $1 $2.

+1

Да, это работает. Но я заинтересован в обучении регулярному выражению. Поэтому я пытался понять это выражение. Я предполагаю, что $ 1 определяет первую группу, окруженную() и $ 2, соответственно второй. Не могли бы вы пролить свет на то, что происходит? – Hairi

+1

Это правильно @ Хайри. И каждая группа соответствует ровно двум символам - задается символом '{2}', где каждый символ является одним из символов в скобках (возможные шестнадцатеричные символы). И поэтому регулярное выражение в возвышенном ходу идет жадно, ища первое совпадение, заменит ли это место, а затем переместится через ваш текст, ища следующий матч ... – Dogweather

0

Различные библиотеки регулярных выражений работают немного по-другому. Я бы рекомендовал проверить regex101.com, где вы можете попробовать различные регулярные выражения и ясно увидеть результаты.

Вот возможная отправная точка для вас:

find: ([0-9a-f][0-9a-f])([0-9a-f][0-9a-f]) (... 
replace: \1 \2 \3 \4 

В зависимости от Regex библиотеки ваш редактор использует, то заменить может быть $ 1 $ 2 $ 3 вместо этого, или находка скобка или скобки, возможно, должны быть экранированы.

2

Вы можете использовать положительный прогноз. Заменить (\S{2})(?=\S) с \1 

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