В настоящее время я пытаюсь сопоставить шаблон для текстового файла дампа eeprom, чтобы найти определенный адрес, а затем пройти 4 шага, как только я столкнулся в поиске.Я пробовал следующий код для поиска шаблона
regexp_list = ('A1 B2')
line = open("dump.txt", 'r').read()
pattern = re.compile(regexp_list)
matches = re.findall(pattern,line)
for match in matches:
print(match)
, который сканирует дамп на A1 B2
и отображает, если найден.Мне нужно добавить больше таких адресов в критерии поиска, например: 'C1 B2', 'D1 F1'
.Я попытался сделать regexp_list
списком, а не кортежем, но это не сработало.
Это одна из проблем.Затем, когда я нажимаю на поиск, я хочу пройти 4 места и затем прочитать адрес оттуда (см. Ниже).
Ввод:
0120 86 1B 00 A1 B2 FF 15 A0 05 C2 D1 E4 00 25 04 00
Здесь, когда поиск находит A1 B2
, я хочу переместить 4 места, т.е. сохранить данные из C2 D1 E4
из дампа.
Ожидаемый результат:
C2 D1 E4
Надеюсь, объяснение было ясным.
#
Благодаря @kcorlidy
Вот последний фрагмент кода, который мне пришлось ввести, чтобы удалить адреса в первом столбце.
newtxt = (text.split("A0 05")[1].split()[4:][:5])
for i in newtxt:
if len(i) > 2:
newtxt.remove(i)
, поэтому полный код выглядит следующим образом
import re
text = open('dump.txt').read()
regex = r"(A1\s+B2)(\s+\w+){4}((\s+\w{2}(\s\w{4})?){3})"
for ele in re.findall(regex,text,re.MULTILINE):
print(" ".join([ok for ok in ele[2].split() if len(ok) == 2]))
print(text.split("A1 B2")[1].split()[4:][:5])
#selects the next 5 elements in the array including the address in 1st col
newtxt = (text.split("A1 B2")[1].split()[4:][:5])
for i in newtxt:
if len(i) > 2:
newtxt.remove(i)
Ввод:
0120 86 1B 00 00 C1 FF 15 00 00 A1 B2 00 00 00 00 C2
0130 D1 E4 00 00 FF 04 01 54 00 EB 00 54 89 B8 00 00
Ввод:
C2 0130 D1 E4 00
C2 D1 E4 00