擅长:python、mysql、java
<p>你的正则表达式只有一个问题。在</p>
<p><code>.*</code>将贪婪地匹配其路径上的所有内容。当它遇到第一个结束符<code>[/charts]</code>时,它将进一步检查前面是否还有{<cd2>}。如果找到,它将继续。在</p>
<p>为了让它一开始停止<code>[/charts]</code>,我们需要加个问号使它变懒。<code>.*?</code>这将继续匹配所有内容并在第一个位置停止{<cd2>}</p>
<p>看看我测试过了:</p>
<pre><code>import re
a="""
[charts]
name: mychart
type: line
labels: fish, cat, dog
data: 4, 5, 6
data2:5, 7, 9
[/charts]
this is some text
[charts]
name: second
type: line
labels: 100, 500, 1000
data: 50, 100, 10000
data2: 100, 100, 100
[/charts]
"""
for c in re.findall('(\[charts\].*?\[/charts\])',a, re.DOTALL):
print c
</code></pre>
<p>输出:</p>
^{pr2}$