擅长:python、mysql、java
<p>在匹配第一个大写字符和最后一个数字之前,您可以不使用正向先行和使用单词边界<code>\b</code>来获得匹配</p>
<pre><code>\b[A-Z][0-9]+-[0-9]+ [A-Z][0-9]+\b
</code></pre>
<p>部分</p>
<ul>
<li><code>\b</code>词边界</li>
<li><code>[A-Z][0-9]+</code>匹配单个A-Z和1+数字</li>
<li><code>-[0-9]+ </code>匹配<code>-</code>,1+个数字和一个空格</li>
<li><code>[A-Z][0-9]+</code>匹配单个A-Z和1+数字</li>
<li><code>\b</code>词边界</li>
</ul>
<p><a href="https://regex101.com/r/uCwqis/1" rel="nofollow noreferrer">Regex demo</a>| <a href="https://ideone.com/Z4QtNo" rel="nofollow noreferrer">Python demo</a></p>
<p>例如</p>
<pre><code>import re
regex = r"\b[A-Z][0-9]+-[0-9]+ [A-Z][0-9]+\b"
test_str = "words here plus num A18-11186 B7 and Q12-45786 D3"
print(re.findall(regex, test_str))
</code></pre>
<p>输出</p>
<pre><code>['A18-11186 B7', 'Q12-45786 D3']
</code></pre>