<p>你可以用</p>
<pre><code>(?!^)(?<!\d)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)
</code></pre>
<p>在Python中,声明为原始字符串文字:</p>
<pre><code>pattern = r'(?!^)(?<!\d)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)'
</code></pre>
<p>参见<a href="https://regex101.com/r/ZnKmud/2" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>细节</strong></p>
<ul>
<li><code>(?!^)</code>-不在字符串的开头</li>
<li><code>(?<!\d)</code>-不允许在当前位置之前有任何数字</li>
<li><code>(?<!\bNo\.\s)</code>-不<code>No.</code>并且允许前面的空白</li>
<li><code>(?<!\bQuestion\s)</code>-no<code>Question</code>并且允许前面有一个空格</li>
<li><code>(\d+)</code>-第1组:一个或多个数字</li>
<li><code>(?!\d)</code>-不允许在当前位置之后立即使用数字。你知道吗</li>
</ul>
<p>在熊猫身上,你可以像</p>
<pre><code>df = pd.DataFrame({'text':[" Test T860 Article No. 9712250 787"," Test F199 Article Question 9712250787"]})
df['numbers'] = df['text'].str.findall(r'(?!^)(?<!\d)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)').apply(','.join)
</code></pre>
<p>输出:</p>
<pre><code>>>> df
text numbers
0 Test T860 Article No. 9712250 787 860,787
1 Test F199 Article Question 9712250787 199
</code></pre>