<p>您可以用一个单词字符开始匹配,在不是逗号的字符之间进行匹配,然后至少匹配W前面的一个数字</p>
<pre><code>(?<!\S)[^,]*\bcharg\w+\b[^,]*\dW\b
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li><code>(?<!\S)</code>在左侧断言空白边界</li>
<li><code>[^,]*</code>匹配除<code>,</code>之外的任何字符的0+次出现次数</li>
<li><code>\bcharg\w+\b</code>一个单词边界,匹配<code>charg</code>后跟1+单词字符和单词边界</li>
<li><code>[^,]*</code>匹配除<code>,</code>之外的任何字符的0+次出现次数</li>
<li><code>\dW\b</code>至少匹配一个后跟<code>W</code>和单词边界的单个数字</li>
</ul>
<p><a href="https://regex101.com/r/urrXFV/1" rel="nofollow noreferrer">Regex demo</a></p>
<pre><code>import re
s = "Fast charging 25W, USB Power Delivery 3.0, Fast Qi/PMA wireless charging 12W, Reverse wireless charging 4.5W, Charge 1250W"
print(re.findall(r"(?<!\S)[^,]*\bcharg\w+\b[^,]*\dW\b", s, re.IGNORECASE))
</code></pre>
<p>输出</p>
<pre><code>[
'Fast charging 25W',
'Fast Qi/PMA wireless charging 12W',
'Reverse wireless charging 4.5W',
'Charge 1250W'
]
</code></pre>
<hr/>
<p>或者,如果在具有<code>W</code>的部分中只能有数字,则可以排除匹配的数字<code>[^,\d]</code>,也可以选择匹配小数部分<code>(?:\.\d+)?</code></p>
<pre><code>(?<!\S)[^,]*\bcharg\w+\b[^,\d]*\d+(?:\.\d+)?W\b
</code></pre>
<p><a href="https://regex101.com/r/ti1b09/1" rel="nofollow noreferrer">Regex demo</a></p>