擅长:python、mysql、java
<p>你可以用</p>
<pre><code>(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)
</code></pre>
<p>见<a href="https://regex101.com/r/WbfbU8/2/" rel="nofollow noreferrer">regex demo</a>。如果字符串中有尾随逗号,此模式允许在字符串的初始位置匹配名称</p>
<p>在熊猫中使用<code>Series.str.extract</code>矢量化方法:</p>
<pre class="lang-py prettyprint-override"><code>df['first name'] = df['name'].str.upper().str.extract(r"(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)", expand=False)
</code></pre>
<p><strong>正则表达式详细信息</strong></p>
<ul>
<li><code>^(?=[^,]*,?$)[\w'-]+</code>-如果字符串没有逗号,但可能以可选逗号(<code>(?=[^,]*,?$)</code>)结尾,则字符串(<code>^</code>)开头的一个或多个单词,<code>'</code>和<code>-</code>字符(<code>[\w'-]+</code>)</li>
<li><code>|</code>-或</li>
<li><code>(?<=, )[\w'-]+</code>-一个或多个单词,<code>'</code>和<code>-</code>字符前面带有逗号+空格</李>
</ul>