我有一个具有多种形式名称的数据框:
JOSEPH W. JASON
Ralph Landau
RAYMOND C ADAMS
ABD, SAMIR
ABDOU TCHOUSNOU, BOUBACAR
ABDL-ALI, OMAR R
对于前三个,规则是最后一句话。对于最后三个或任何带有逗号的单词,第一个单词是姓氏。然而,对于像Abdou Tchousnou这样的名字,我只记住了最后一个词,那就是Tchousnou
预期产量为
JASON
LANDAU
ADAMS
ABD
TCHOUNOU
ABDL-ALI
左边是名字,右边是我想要返回的
str.extract(r'(^(?=[^,]*,?$)[\w-]+|(?<=, )[\w-]+)', expand=False)
有没有办法解决这个问题?当前代码只返回名字,而不是我想要的姓氏
您可以使用此正则表达式提取:
正则表达式详细信息:
(
:启动捕获组[^,]+(?=,)
:匹配1+个非逗号字符|
:或\w+
:匹配1+个单词字符(?:-\w+)*
:匹配-
后跟1+个单词字符。匹配此组中的0个或多个)
:结束捕获组(?=,|$)
:Lookahead断言前面有逗号或行尾类似这样的方法会奏效:
(
-启动捕获组#1.+(?=,)
-在逗号之前获取所有内容|
-或\S+$
-在行尾之前获取所有不是空白的内容)
-末端捕获群#1https://regex101.com/r/myvyS0/1
Python:
相关问题 更多 >
编程相关推荐