如何使 Python 的 findall 正则表达式方法包含在内

How to make Python's findall regular expression method inclusive

我有一个如下所示的字符串。

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

我想提取子字符串 中的文本,包括 %%,但我不知道如何使正则表达式包含在内。

例如,re.findall('%%(.*?)%%', s, re.DOTALL)会输出['substring1', 'substring2'],但我真正想要的是return ['%%substring1%%', '%%substring2%%'].

有什么建议吗?

你离得很近。将组放在匹配整个所需部分而不是仅匹配之间的字符串

>>> 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%%']

对于一些可视化,请查看此

Debuggex Demo

并检查解释 here