2013-07-20 3 views
2

У меня есть строка, содержащая группы, разделенные определенными подстроками. Что-то вроде:Группы извлечения, разделенные подстрокой

FOO10 F10 O20 FOO20 F11 O11 

Я хочу, чтобы разбить его на группы, сохраняя при этом идентификатор группы, т.е.

FOO10 F10 O20 
FOO20 F11 O11 

Есть ли способ, чтобы захватить что-либо от слова FOO до левой границы следующего FOO или конец строки?

+1

Ваш формат всегда: 'FOOx Fx Ox'? –

ответ

3
>>> import re 
>>> re.findall('FOO.*?(?=FOO|$)', "FOO10 F10 O20 FOO20 F11 O11") 
['FOO10 F10 O20 ', 'FOO20 F11 O11'] 
>>> map(str.strip, re.findall('FOO.*?(?=FOO|$)', "FOO10 F10 O20 FOO20 F11 O11")) 
['FOO10 F10 O20', 'FOO20 F11 O11'] 
3
>>> s = "FOO10 F10 O20 FOO20 F11 O11" 
>>> import re 
>>> regex = re.compile(r"FOO(?:(?!\s*FOO).)*") 
>>> regex.findall(s) 
['FOO10 F10 O20', 'FOO20 F11 O11'] 

Объяснение:

FOO   # Match FOO 
(?:   # Start of non-capturing group: 
(?!\s*FOO) # Assert that we're not right before (whitespace) FOO 
.   # Match any character 
)*   # Repeat as needed 
Смежные вопросы