2015-05-19 24 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篇帖子!拍我自己的背部 –