猿问

正则表达式代码,如何解决某些数据输入错误

我有两个数据框


df1


name

ADAM, HAFIZ M

ABAD, FARLEY J

CORDDED, NANCY C

BOMBSHAD, WANG D


df2

JOSEPH W. HOLUBKA   

WANG E. JONATHAN

CUCU F. LIU,

WANG C. DANA,

LANDY F. JON

我希望提取每个数据帧的名字。对于 df1,我需要“,”之后的“名字”部分,第二个 df,名字就是我想要的。


所以返回的 df 是


df1

HAFIZ

FARLEY

NANCY

WANG


df2

JOSEPH

WANG

CUCU

WANG

LANDY

我当前的代码是


  df['name'].str.upper().apply(lambda name:re.search(r'\w+(?!.*,)',name).group())

这个正则表达式适用于两个 df,但是,我刚刚意识到我的数据有一个输入错误。在 df2 中,Liu 和 Dana 末尾有一个“,”,这导致正则表达式不起作用。


错误是 group() 不是属性。


无论如何我可以修复这个代码吗?正则表达式应该适用于 df


吃鸡游戏
浏览 122回答 2
2回答

沧海一幻觉

您可以使用(^(?=[^,]*,?$)[\w'-]+|(?<=,&nbsp;)[\w'-]+)请参阅正则表达式演示。如果字符串中存在尾随逗号,则此模式允许在字符串中的初始位置匹配名称。在 Pandas 中使用向Series.str.extract量化方法:df['first&nbsp;name']&nbsp;=&nbsp;df['name'].str.upper().str.extract(r"(^(?=[^,]*,?$)[\w'-]+|(?<=,&nbsp;)[\w'-]+)",&nbsp;expand=False)正则表达式详细信息^(?=[^,]*,?$)[\w'-]+'- 一个或多个单词,如果字符串没有逗号但可以以可选逗号 ( ) 结尾,则在字符串 ( ) 开头添加-字符[\w'-]+(&nbsp;)^(?=[^,]*,?$)|- 或者(?<=, )[\w'-]+- 一个或多个单词,'以及-字符 字符前面带有逗号 + 空格。

牧羊人nacy

再试一次,因为我的第一个不在那里。您只需要更改一件事。当它们的前瞻匹配任何逗号时,我们只想匹配后面跟着另一个单词的逗号。导致:(?:(?<=^(?!.*, *\w))|(?<=, ))([A-Z]+)
随时随地看视频慕课网APP
我要回答