<p>您可以获取第一次出现<code>-</code>+位+<code>-</code>之前的所有文本:</p>
<pre><code>^.*?(?=-\d+-)
</code></pre>
<p>如果数字必须正好是4位数字(例如,如果是一年),则将<code>+</code>替换为<code>{4}</code>:</p>
<pre><code>^.*?(?=-\d{4}-)
</code></pre>
<p>见<a href="https://regex101.com/r/zhYgGs/2" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>详细信息</strong></p>
<ul>
<li><code>^</code>-字符串的开头</li>
<li><code>.*?</code>-除换行符以外的任何0+字符,尽可能少</li>
<li><code>(?=-\d+-)</code>-直到第一次出现<code>-</code>和1+个数字(或者,如果使用了<code>\d{4}</code>,正好是四个数字),然后是<code>-</code>(此部分不会添加到匹配值中,因为正向前瞻是一种非消耗模式)</李>
</ul>
<p>见<a href="https://ideone.com/FnX2db" rel="nofollow noreferrer">Python demo</a>:</p>
<pre><code>import re
strs = ["GN1RLWFH0546-2020-04-10-18-09-52-563945.txt", "JOHN-DOE-2020-04-10-18-09-52-563946t64.txt", "DESKTOP-OHK45JO-2020-04-09-02-27-11-451975.txt"]
rx = re.compile(r"^.*?(?=-\d+-)")
for s in strs:
m = rx.search(s)
if m:
print("{} => '{}'".format(s, m.group()))
</code></pre>
<p>输出:</p>
<pre><code>GN1RLWFH0546-2020-04-10-18-09-52-563945.txt => 'GN1RLWFH0546'
JOHN-DOE-2020-04-10-18-09-52-563946t64.txt => 'JOHN-DOE'
DESKTOP-OHK45JO-2020-04-09-02-27-11-451975.txt => 'DESKTOP-OHK45JO'
</code></pre>