如何让Python找到包含正则表达式的方法

时间:2015-05-19 21:12:16

标签: python regex findall

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

re.findall('%%(.*?)%%', s, re.DOTALL)

我想提取子字符串中的文本,包括['substring1', 'substring2'] ,我无法弄清楚如何制作正则表达式。

例如,['%%substring1%%', '%%substring2%%']会输出CREATE table org ( id INT PRIMARY KEY, name TEXT NOT NULL, parent_id INT); INSERT INTO org (id, name) VALUES (0, 'top'); INSERT INTO org (id, name, parent_id) VALUES (1, 'middle1', 0); INSERT INTO org (id, name, parent_id) VALUES (2, 'middle2', 0); INSERT INTO org (id, name, parent_id) VALUES (3, 'bottom3', 1); WITH RECURSIVE parent_org (id, parent_id, name) AS ( SELECT id, parent_id, name FROM org WHERE id = 3 UNION ALL SELECT o.id, o.parent_id, o.name FROM org o, parent_org po WHERE po.parent_id = o.id) SELECT id, parent_id, name FROM parent_org; ,但我真正想要的是返回3 1 "bottom3" 1 0 "middle1" 0 "top"

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

你很近。将组与整个所需部分匹配,而不是仅匹配

之间的字符串
>>> s = 'string with %%substring1%% and %%substring2%%'
>>> import re
>>> re.findall('(%%.*?%%)', s, re.DOTALL)
['%%substring1%%', '%%substring2%%']

你实际上根本不需要parens!

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

对于某些可视化,请查看

Regular expression visualization

Debuggex Demo

并检查解释here