<p>虽然它在Regex中是可以做到的,但是您应该使用一个能够理解格式的解析器,因为Regex解决方案非常脆弱。你知道吗</p>
<p>说到这里,这里有一个启用了<strong><code>DOTALL</code></strong>模式(<em>其中<code>.</code>匹配任何字符,包括换行符</em>)的正则表达式解决方案:</p>
<pre><code>re.findall(r'explore:.*?\}', text, re.DOTALL)
</code></pre>
<ul>
<li><code>explore:</code>逐字匹配</li>
<li><code>.*?\}</code>非贪婪匹配到下一个<code>}</code></li>
</ul>
<p><strong>示例:</strong></p>
<pre><code>In [1253]: text = '''explore: character_balance {}
...: explore: tower_ends {
...: label: "Tower Results"
...: join: activity_type {
...: relationship: many_to_one
...: type: inner
...: sql_on: ${activity_type.activity_name}=${wba_fact_activity.activity_name} ;;
...: }
...: }
...: explore: seven11_core_session_start {}'''
In [1254]: re.findall(r'explore:.*?\}', text, re.DOTALL)
Out[1254]:
['explore: character_balance {}',
'explore: tower_ends {\n label: "Tower Results"\n join: activity_type {\n relationship: many_to_one\n type: inner\n sql_on: ${activity_type.activity_name}',
'explore: seven11_core_session_start {}']
</code></pre>