擅长:python、mysql、java
<p>您从未向我们提供模拟数据,因此我使用以下内容进行测试:</p>
<pre><code>name1: Here is a sentence.
name2: Here is another stuff: sentence
which happens to have two lines
name3: Blah.
</code></pre>
<p>我们可以尝试使用以下模式进行匹配:</p>
<pre><code>^\S+:\s+((?:(?!^\S+:).)+)
</code></pre>
<p>这可以解释为:</p>
<pre><code>^\S+:\s+ match the name, followed by colon, followed by one or more space
((?:(?!^\S+:).)+) then match and capture everything up until the next name
</code></pre>
<p>请注意,这将处理最后一句话的边缘大小写,因为上面使用的否定的lookahead将不是真的,因此将捕获所有剩余的内容。你知道吗</p>
<p>代码示例:</p>
<pre><code>import re
line = "name1: Here is a sentence.\nname2: Here is another stuff: sentence\nwhich happens to have two lines\nname3: Blah."
matches = re.findall(r'^\S+:\s+((?:(?!^\S+:).)+)', line, flags=re.DOTALL|re.MULTILINE)
print(matches)
['Here is a sentence.\n', 'Here is another stuff: sentence\nwhich happens to have two lines\n', 'Blah.']
</code></pre>
<p><a href="https://rextester.com/VWZJ96823" rel="nofollow noreferrer"><h2>Demo</h2></a></p>