Сопоставление данных между отступами - PullRequest
2 голосов
/ 10 июля 2019

Я пытаюсь сопоставить некоторые строки в двоичном файле, и строки выглядят дополненными. Например, слово PROGRAM может быть в двоичном виде следующим образом:

%$##@P^&#!)00000R{]]]////O.......G"""""R;;$#!*%&#*A/////847M

В этом примере слово PROGRAM есть, но оно разбито на части и находится между случайными данными, поэтому я пытаюсь использовать регулярное выражение, чтобы найти его.

В настоящее время это то, что я придумал, но я не думаю, что это очень эффективно:

(?<=P)(.*?)(?=R)(.*?)(?=O)(.*?)(?=G)(.*?)(?=R)(.*?)(?=A)(.*?)(?=M)

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Если вы хотите получить PROGRAM из строки, одним из вариантов может быть использование re.sub с отрицательным символьным классом для удаления всего, что вам не нужно.

[^A-Z]+

Regex demo | Python demo

Например:

import re
test_str = "%$##@P^&#!)00000R{]]]////O.......G\"\"\"\"\"R;;$#!*%&#*A/////847M"
pattern = r'[^A-Z]+'
print(re.sub(pattern, '', test_str))

Результат

PROGRAM

1 голос
/ 10 июля 2019

Это должно работать для вас и более эффективно, чем ваше текущее решение:

P[^R]+R[^O]+O[^G]+G[^R]+R[^A]+A[^M]+M

Объяснение:

P[^R]+ - соответствует P, чем один или несколько символов, кромеR

Демо

0 голосов
/ 10 июля 2019

Я не совсем уверен, каким может быть желаемый результат, наверное, это выражение,

(?=.*?P.*?R.*?O.*?G.*?R.*?A.*?M).*?(P).*?(R).*?(O).*?(G).*?(R).*?(A).*?(M)

может быть началом.

Выражение объяснено на верхней правой панели этой демонстрации , если вы хотите исследовать дальше или упростить / изменить ее, а в этой ссылке вы можете посмотреть, как оно будет соответствовать пошаговым шагам ввода некоторых примеров, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...