擅长:python、mysql、java
<p>要包含<code>my _car_</code>,只需移动capture组的左括号。你知道吗</p>
<p>但这又提出了第二个问题。您在结果中包含了后面的“my”。使用lookahead<code>(?=...)</code>避免捕获它。你知道吗</p>
<p>但这又引发了另一个问题。最后一辆车没有尾随的<code>my</code>。所以我们也搜索字符串的结尾。你知道吗</p>
<p>最终结果:</p>
<pre><code>m = re.findall(r'(?s)(my _car_\s*.*?)(?=my|$)', lines)
</code></pre>
<p>与正则表达式搜索无关,<code>print</code>的使用在项之间引入了一个额外的行。我们可以用<code>os.write()</code>替换<code>print</code>,也可以使用后面的<code>,</code>来避免多余的行。你知道吗</p>
<p>课程:</p>
<pre><code>import re
with open("in1.txt") as f:
lines = f.read()
m = re.findall(r'(?s)(my _car_\s*.*?)(?=my|$)', lines)
for i in m:
print i,
</code></pre>
<p>结果:</p>
<pre><code>$ python in1.py
my _car_(10)
skoda
audi
my _car_(11)
benz
</code></pre>