Соответствие группы регулярных выражений - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь найти последовательность двоичных цифр, разделенных пробелами, например:

>>> seq = '0 1 1 1 0 0 1 0'

Итак, я создаю регулярное выражение:

>>> pat = r'(\b[01]\b)+'

, но следующий поиск возвращает только одну цифру:

>>> re.search(pat, seq).group(0)
'0'

Что не так?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Вы очень близко, просто пропустите пробел в шаблоне.Попробуйте pat = r'\b([01] )*[01]\b'

>>> import re
>>> seq = '0 1 1 1 0 0 1 0'
>>> pat = r'\b([01] )*[01]\b'
>>> re.search(pat, seq).group(0)
'0 1 1 1 0 0 1 0'
>>> re.search(pat, 'spam and 0 0 0 1 0eggs').group(0)
'0 0 0 1'
0 голосов
/ 03 февраля 2012

Ваше текущее регулярное выражение не может соответствовать пробелу, поэтому оно может соответствовать только одному символу. Вы можете использовать одно и то же регулярное выражение с re.findall(), чтобы получить все совпадения в строке, или изменить свое регулярное выражение так, чтобы оно продолжало совпадение, даже если встречается пробел.

Вот пример использования re.findall():

>>> re.findall(r'(\b[01]\b)+', '0 1 1 1 0 0 1 0')
['0', '1', '1', '1', '0', '0', '1', '0']

Или, изменив регулярное выражение на (\b[01]\b\s?)+, вы можете получить всю последовательность в одном совпадении:

>>> re.search(r'(\b[01]\b\s?)+', '0 1 1 1 0 0 1 0').group(0)
'0 1 1 1 0 0 1 0'
...