擅长:python、mysql、java
<p>您可以在单词边界之间进行匹配,并使用正向前瞻来断言和大写字符以及数字:</p>
<p><a href="https://regex101.com/r/bzDcJi/1" rel="nofollow noreferrer">^{<cd1>}</a></p>
<p>符合以下条件:</p>
<ul>
<li><code>\b</code>词边界</li>
<li><code>(?=</code>肯定的向前看,断言正确的东西
<ul>
<li><code>[A-Z0-9]</code>*匹配零次或多次大写字符</li>
<li><code>[A-Z]</code>匹配大写字符</li>
</ul></li>
<li><code>)</code>关闭正向展望</li>
<li><code>(?=</code>肯定的向前看,断言正确的东西
<ul>
<li><code>[A-Z0-9]*</code>匹配零次或多次大写字符</li>
<li><code>[0-9]</code>匹配一个数字</li>
</ul></li>
<li><code>)</code>关闭正向展望</li>
<li><code>[A-Z0-9]+</code>匹配一个或多个大写字符或数字</li>
<li><code>\b</code>词边界</li>
</ul>
<p>因此,在Python中,这将是:</p>
<pre><code>import re
s = "some blah blah blah with id X12354, id 1234Z and id 12P555. All are 50 years old."
re.findall(r'\b(?=[A-Z-0-9]*[A-Z])(?=[A-Z-0-9]*[0-9])[A-Z0-9]+\b', s)
</code></pre>
<p>给予:</p>
<pre><code>['X12354', '1234Z', '12P555']
</code></pre>