<p>您可以使用两种备选方案组合所有可能性,然后将1+数字与可选点和1+数字进行匹配:</p>
<pre><code>\b(?:silence|black)_(?:start|end|duration):\s*\d+(?:\.\d+)?\b
</code></pre>
<p>模式将匹配:</p>
<ul>
<li><code>\b</code>字边界</li>
<li><code>(?:silence|black)_</code>匹配沉默或黑色和下划线</li>
<li><code>(?:start|end|duration):\s*</code>匹配开始或结束或持续时间,<code>:</code>和0+空格字符</li>
<li><code>\d+(?:\.\d+)?</code>匹配1+个数字和可选点A数字部分</li>
<li><code>\b</code>字边界</li>
</ul>
<p><a href="https://regex101.com/r/7eMYvI/1" rel="nofollow noreferrer">Regex demo</a><a href="https://ideone.com/sb4kKR" rel="nofollow noreferrer">Python demo</a></p>
<p><em>例如</em></p>
<pre><code>import re
test_str = "your string"
regex = r"\b(?:silence|black)_(?:start|end|duration):\s*\d+(?:\.\d+)?\b"
print(re.findall(regex, test_str))
</code></pre>
<p><em>输出</em></p>
<pre><code>['silence_start: 0', 'black_start:0', 'black_end:5', 'black_duration:5', 'silence_end: 5.06285', 'silence_duration: 5.06285', 'silence_start: 227.733', 'silence_end: 229.051', 'silence_duration: 1.3184', 'silence_start: 229.051', 'black_start:229.28', 'black_end:230.24', 'black_duration:0.96', 'silence_end: 230.28', 'silence_duration: 1.22856']
</code></pre>