我有一个字符串,如下所示。
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"
。
有什么建议吗?
答案 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%%']
对于某些可视化,请查看
并检查解释here