Эквивалент синтаксиса grep regexp в Python для групп совпадений, повторяющихся несколько раз - PullRequest
0 голосов
/ 03 октября 2019

В тексте, который содержит подстроку, такую ​​как aa:bb:11:22 Я хочу реализовать регулярное выражение в Python, которое соответствует указанному фрагменту, независимо от его длины.

Используя grep, можно было бы сделать grep -E "([0-9a-f]{2}:)+[0-9a-f]{2}"

Что эквивалентно группе, повторенной несколько раз (<regexp>)+ в Python?

РЕДАКТИРОВАТЬ

Используя следующую строку:

s2 = 'Public-Key:(1024bit)Modulus:00:aa:18:ab:a4:3b:50:de:ef:38:59:8f:af:87:d2:ab:63:4e:45:71:c1:30:a9:bc:a7:b8:78:29:74:14:fa:ab:8b:47:1b:d8:96:5f:5c:9f:c3:81:84:85:ea:f5:29:c2:62:46:f3:05:81:64:a8:de:19:c8:c3:38:be:54:96:cb:ae:b0:59:dc:0b:35:81:43:b4:4a:35:44:9e:b2:64:11:33:21:a4:55:bd:7f:de:3f:ac:91:9e:94:b5:6f:b9:bb:4f:65:1c:db:23:ea:d4:39:d6:cd:52:3e:b0:81:91:e7:5b:35:fd:13:a7:41:9b:30:90:f2:47:87:bd:4f:4e:19:67Exponent:65537(0x10001)'

со следующей командой в Python

re.findall("([0-9a-f]{2}:)+[0-9a-f]{2}", s2)

Я получаю

19:

То, что я хочу получить, и я получаю с grep, это:

> grep -E "([0-9a-f]{2}:)+[0-9a-f]{2}"

<paste_whole_string>

Result highlighted by grep:
00:aa:18:ab:a4:3b:50:de:ef:38:59:8f:af:87:d2:ab:63:4e:45:71:c1:30:a9:bc:a7:b8:78:29:74:14:fa:ab:8b:47:1b:d8:96:5f:5c:9f:c3:81:84:85:ea:f5:29:c2:62:46:f3:05:81:64:a8:de:19:c8:c3:38:be:54:96:cb:ae:b0:59:dc:0b:35:81:43:b4:4a:35:44:9e:b2:64:11:33:21:a4:55:bd:7f:de:3f:ac:91:9e:94:b5:6f:b9:bb:4f:65:1c:db:23:ea:d4:39:d6:cd:52:3e:b0:81:91:e7:5b:35:fd:13:a7:41:9b:30:90:f2:47:87:bd:4f:4e:19:67

1 Ответ

0 голосов
/ 05 октября 2019

Кажется, работает довольно хорошо:

>>> s2 = 'Public-Key:(1024bit)Modulus:00:aa:18:ab:a4:3b:50:de:ef:38:59:8f:af:87:d2:ab:63:4e:45:71:c1:30:a9:bc:a7:b8:78:29:74:14:fa:ab:8b:47:1b:d8:96:5f:5c:9f:c3:81:84:85:ea:f5:29:c2:62:46:f3:05:81:64:a8:de:19:c8:c3:38:be:54:96:cb:ae:b0:59:dc:0b:35:81:43:b4:4a:35:44:9e:b2:64:11:33:21:a4:55:bd:7f:de:3f:ac:91:9e:94:b5:6f:b9:bb:4f:65:1c:db:23:ea:d4:39:d6:cd:52:3e:b0:81:91:e7:5b:35:fd:13:a7:41:9b:30:90:f2:47:87:bd:4f:4e:19:67Exponent:65537(0x10001)'
>>> import re
>>> re.findall( r'((?:[0-9a-f]{2}:)+[0-9a-f]{2})', s2 )
['00:aa:18:ab:a4:3b:50:de:ef:38:59:8f:af:87:d2:ab:63:4e:45:71:c1:30:a9:bc:a7:b8:78:29:74:14:fa:ab:8b:47:1b:d8:96:5f:5c:9f:c3:81:84:85:ea:f5:29:c2:62:46:f3:05:81:64:a8:de:19:c8:c3:38:be:54:96:cb:ae:b0:59:dc:0b:35:81:43:b4:4a:35:44:9e:b2:64:11:33:21:a4:55:bd:7f:de:3f:ac:91:9e:94:b5:6f:b9:bb:4f:65:1c:db:23:ea:d4:39:d6:cd:52:3e:b0:81:91:e7:5b:35:fd:13:a7:41:9b:30:90:f2:47:87:bd:4f:4e:19:67']
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...