<p><strong>1ts尝试</strong></p>
<p>您可以使用pandas中的<a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.str.extract.html#pandas.Series.str.extract" rel="nofollow noreferrer">^{<cd1>}</a>。这将对字符串应用正则表达式,并为每个组返回一列。因为您想要完全匹配,所以只需要colmn<code>0</code>中的第一个组</p>
<pre><code>df['Part Number'].str.extract('(([A-Z\d]+)+(-.*)?)$', expand=False)[0]
</code></pre>
<p>{<cd3>}做什么</p>
<ul>
<li><code>$</code>是字符串的结尾,因此我们只希望在末尾有组</li>
<li><code>(-.*)?</code>是一个组,它匹配<code>-</code>之后的所有字母。该组可以被找到零次或多次,用<code>?</code>表示</li>
<li><code>([A-Z\d]+)</code>是至少匹配一个大写字母或数字的组</李>
</ul>
<p>这两个组的组合就是要推断的字符串</p>
<p><strong>第二次尝试</strong></p>
<p>您可以定义一个正则表达式并使用pandas<a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.str.replace.html?highlight=replace#pandas.Series.str.replace" rel="nofollow noreferrer">^{<cd9>}</a>选项。
据我所见,您希望在asterix<code>*</code>、空空间<code> </code>和<code>x</code>或右括号<code>)</code>之前重新封装所有元素。下面的代码尝试从字符串的左侧开始,最多查找1个匹配项</p>
<pre><code>df_s1['Part Number'].str.replace('(.*[x| |\)|\*])', '', n=1)
</code></pre>
<p><strong>第三次尝试</strong></p>
<p>您可以尝试下面的代码,因为您知道要替换的所有字符串。在这种情况下,您将在每个字符串上循环多次,如果发现不需要的子字符串,则将该字符串替换为空字符串</p>
<pre><code>def replace(x):
for item in ['(2)','2*','(4X)','1*','4x','5x','(1)','2 ','(7x)','((*2)','((4))']:
x = x.replace(item, '')
return x
df_s1['Part Number'].apply(replace)
</code></pre>