<p>在匹配数字之前,您可以选择匹配<code>$</code>或大写字符</p>
<pre><code>(?:\$|\b[A-Z]+)?\d+
</code></pre>
<p>模式匹配</p>
<ul>
<li><code>(?:</code>非捕获组
<ul>
<li><code>\$</code>匹配$</li>
<li><code>|</code>或</li>
<li><code>\b[A-Z]+</code>单词边界,匹配1+大写字符</li>
</ul>
</li>
<li><code>)?</code>关闭非捕获组并将其设置为可选</li>
<li><code>\d+</code>匹配1+个数字</li>
</ul>
<p><a href="https://regex101.com/r/v4oOgY/1" rel="nofollow noreferrer">Regex demo</a><a href="https://ideone.com/V9zwJp" rel="nofollow noreferrer">Python demo</a></p>
<p>范例</p>
<pre><code>import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'
arr = re.findall(r'(?:\$|\b[A-Z]+)?\d+', test)
print(arr)
</code></pre>
<p>输出</p>
<pre><code>['2', '$248', 'ABC1234']
</code></pre>
<hr/>
<p>如果您不想只匹配数字,则非捕获组不应是可选的,您可以在末尾添加单词边界<code>\b</code>,以防止部分匹配:</p>
<pre><code> (?:\$|\b[A-Z]+)\d+\b
</code></pre>
<p><a href="https://regex101.com/r/icVdbj/1" rel="nofollow noreferrer">Regex demo</a><a href="https://ideone.com/6upvmA" rel="nofollow noreferrer">Python demo</a></p>
<pre><code>import re
test = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number ABC1234.'
arr = re.findall(r'(?:\$|\b[A-Z]+)\d+\b', test)
print(arr)
</code></pre>
<p>输出</p>
<pre><code>['$248', 'ABC1234']
</code></pre>