2015-05-19 51 views
2

我有一個如下所示的字符串。如何讓Python的findall正則表達式方法包含

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

你甚至需要括號,因爲它在返回完整匹配缺乏parens:P(+1都是一樣的:P) –

+1

@JoranBeasley T那個! –

+1

我的第400篇帖子!拍我自己的背部 –