Как с помощью регулярных выражений (regexp) найти бинарную строку в массиве?

Здравствуйте! У меня есть задача по парсингу бинарного файла, и мне нужно выполнить несколько действий:  
1. Найти определённые строки и удалить их.  
2. Найти определённые строки и сохранить их отдельно в текстовый файл.  
(В файле содержится лог в формате HEX, из которого нужно извлечь некоторые команды).  

У меня есть идеи, как это сделать, но я затрудняюсь с реализацией поиска HEX-значений с использованием символа-заменителя. 

Вот пример шаблона для поиска, в котором <blockquote>@</blockquote> обозначает заменяемый символ, соответствующий любому значению (от 0 до FF):  
<code class="cs">byte[] шаблон = {0x37, 0xDF, @,@,@,@,0x20,0x33};</code>
  • 29 октября 2024 г. 15:13
Ответы на вопрос 2
Для работы с бинарными файлами и парсингом данных в формате HEX с использованием регулярных выражений, вам потребуется несколько шагов, включая чтение бинарного файла, преобразование его в строку в нужном формате, а затем применение регулярного выражения для поиска нужных шаблонов.

Если вы используете язык программирования, такой как Python, то вы можете сделать это следующим образом:

### Шаг 1: Чтение бинарного файла

Сначала нужно считать содержимое вашего бинарного файла:

```python
# Чтение бинарного файла
with open('yourfile.bin', 'rb') as f:
    data = f.read()
```

### Шаг 2: Преобразование в HEX строку

Далее, чтобы работать с HEX, вы можете преобразовать бинарные данные в строку HEX:

```python
hex_data = data.hex().upper()  # Преобразуем в HEX и делаем заглавными
```

### Шаг 3: Регулярное выражение для поиска

Теперь вы можете создать регулярное выражение, чтобы найти шаблон, учитывая, что `@` заменяет любое одно значение в диапазоне от `00` до `FF`. Для этого используйте регулярное выражение, где `..` будет представлять любой байт:

```python
import re

# Шаблон, где '@' заменяется на '[0-9A-F]{2}' (две HEX цифры)
pattern = r'37DF[0-9A-F]{2}[0-9A-F]{2}[0-9A-F]{2}20[0-9A-F]{2}'
matches = re.findall(pattern, hex_data)
```

### Шаг 4: Удаление строк или сохранение их в файл

Чтобы удалить соответствующие строки или сохранить их, вы можете использовать следующее:

#### Удаление строк

Для удаления, если вы знаете, что у вас есть строки, которые вы хотите удалить, вы можете использовать `re.sub()`:

```python
cleaned_data = re.sub(pattern, '', hex_data)  # Удаление найденных строк
```

#### Сохранение найденных строк в файл

Если вы хотите сохранить найденные строки в текстовый файл:

```python
with open('output.txt', 'w') as output_file:
    for match in matches:
        output_file.write(match + '\n')
```

### Полный пример

Вот как все это может выглядеть вместе:

```python
import re

# Чтение бинарного файла
with open('yourfile.bin', 'rb') as f:
    data = f.read()

# Преобразование в HEX строку
hex_data = data.hex().upper()

# Шаблон для поиска
pattern = r'37DF[0-9A-F]{2}[0-9A-F]{2}[0-9A-F]{2}20[0-9A-F]{2}'

# Поиск всех совпадений
matches = re.findall(pattern, hex_data)

# Сохранение найденных строк в текстовый файл
with open('output.txt', 'w') as output_file:
    for match in matches:
        output_file.write(match + '\n')

# Удаление найденных строк из HEX данных
cleaned_data = re.sub(pattern, '', hex_data)

# Если нужно сохранить очищенные данные
with open('cleaned_output.hex', 'w') as cleaned_file:
    cleaned_file.write(cleaned_data)
```

В результате у вас будет файл `output.txt` с найденными строками и файл `cleaned_output.hex` с удаленными строками.
Все - дошло. 
Всем спасибо, пока корректировал ответ,
понял ответ на вопрос:
как искать "Любое значение" в массиве hex data.
Cпасибо, Извините что нарушил правила ( ? )
Хотя не ясно, нарушил ли
Похожие вопросы