擅长:python、mysql、java
<p>在您的模式中,character类<code>[p/n:]\s+</code>将匹配列出的字符之一,后跟1+空格字符。在本例中,匹配正斜杠或冒号后跟空格的数据。你知道吗</p>
<p>下一部分<code>(?:\w+(?:\s+|$))</code>将匹配1+个单词字符,后跟字符串结尾或1+个空格字符,而不考虑中间的空格字符或连字符。你知道吗</p>
<p>一个选项是将PN与可选的<code>:</code>和<code>/</code>匹配,而不是使用字符类<code>[p/n:]</code>,并将您的值包含在捕获组中:</p>
<pre><code>/ P/?N:? ([\w-]+)
</code></pre>
<p><a href="https://regex101.com/r/4nFaH1/1" rel="nofollow noreferrer">Regex demo</a>| <a href="https://ideone.com/EVIw52" rel="nofollow noreferrer">Python demo</a></p>
<p>例如:</p>
<pre><code>import re
text_list = ['Industry / Gemany / PN M564839', 'Industry / France / PN: 575-439', 'Telecom / Gemany / P/N 26-59-29', 'Mobile / France / P/N: 88864839']
regex = r"/ P/?N:? ([\w-]+)"
res = []
for text in text_list:
matches = re.search(regex, text)
if matches:
res.append(matches.group(1))
print(res)
</code></pre>
<p>结果</p>
<pre><code>['M564839', '575-439', '26-59-29', '88864839']
</code></pre>