2015-05-19 7 views
2

У меня есть строка, которая выглядит следующим образом.Как сделать метод регулярных выражений findall на Python включительно

s = 'string with %%substring1%% and %%substring2%%'

Я хочу, чтобы извлечь текст в подстроках включая %% и я не могу понять, как сделать регулярное выражение включительно.

Например, re.findall('%%(.*?)%%', s, re.DOTALL) будет выводить ['substring1', 'substring2'], но я действительно хочу, чтобы он возвращал ['%%substring1%%', '%%substring2%%'].

Любые предложения?

ответ

5

Вы были совсем рядом. Поместите группу, чтобы соответствовать всей требуемой части, а не только строки в между

>>> s = 'string with %%substring1%% and %%substring2%%' 
>>> import re 
>>> re.findall('(%%.*?%%)', s, re.DOTALL) 
['%%substring1%%', '%%substring2%%'] 

Вы на самом деле не нужны скобки на всех!

>>> re.findall('%%.*?%%', s, re.DOTALL) # Even this works !!! 
['%%substring1%%', '%%substring2%%'] 

И для некоторой визуализации, проверить это

Regular expression visualization

Debuggex Demo

и проверить объяснений here

+0

вы даже не нужны круглые скобки, поскольку он возвращает полный матч отсутствие парен: P (+1 все равно: P) –

+1

@JoranBeasley T rue это! –

+1

Мой 400-й пост на SO! Пэт на моей спине –

Смежные вопросы