2015-04-21 2 views
1

Я хочу извлечь подстроку из строки, которая соответствует определенному регулярному выражению. Регулярное выражение:python get substring from regex

(\[\s*(\d)+ byte(s)?\s*\](\s*|\d|[A-F]|[a-f])+)

Что фактически означает, что все эти строки получить признание:

[4 bytes] 66 74 79 70 33 67 70 35 
[ 4 bytes ] 66 74 79 70 33 67 70 35 
[1 byte] 66 74 79 70 33 67 70 35 

Я хочу, чтобы извлечь только количество байтов (только число) из этой строки. Я думал об этом с re.search, но я не уверен, что это сработает. Какой будет самый чистый и самый эффективный способ сделать это?

ответ

6

Используйте match.group, чтобы получить группы регулярное выражение определяет:

import re 

s = """[4 bytes] 66 74 79 70 33 67 70 35 
[ 4 bytes ] 66 74 79 70 33 67 70 35 
[1 byte] 66 74 79 70 33 67 70 35""" 
r = re.compile(r"(\[\s*(\d)+ byte(s)?\s*\](\s*|\d|[A-F]|[a-f])+)") 

for line in s.split("\n"): 
    m = r.match(line) 
    if m: 
     print(m.group(2)) 

Первая группа соответствует [4 bytes], второй только 4.

Выход:

4 
4 
1 
+0

OP хочет только число байт! – Docteur

+1

@Docteur изменил это. –

+0

@Tichodroma Большое спасибо! – pidgey