首页 > 解决方案 > 多种形式的文本格式的正则表达式文本清理

问题描述

我有一个具有多种名称的数据框:

JOSEPH W. JASON
Ralph Landau
RAYMOND C ADAMS
ABD, SAMIR
ABDOU TCHOUSNOU, BOUBACAR
ABDL-ALI, OMAR R

对于前 3 个,规则是最后一个字。对于最后三个或任何带逗号的内容,第一个单词是姓氏。但是,对于像 Abdou Tchousnou 这样的名字,我只取了最后一个词,即 Tchousnou。

预期的输出是

JASON
LANDAU
ADAMS
ABD
TCHOUNOU
ABDL-ALI

左边是名字,右边是我要返回的。

str.extract(r'(^(?=[^,]*,?$)[\w-]+|(?<=, )[\w-]+)', expand=False)

有没有办法解决这个问题?当前代码仅返回名字而不是我想要的姓氏。

标签: pythonregex

解决方案


像这样的东西会起作用:

(.+(?=,)|\S+$)
  • (- 开始捕获组 #1
  • .+(?=,)- 获取逗号前的所有内容
  • |- 或者
  • \S+$- 在行尾之前获取不是空格的所有内容
  • )- 结束捕获组 #1

https://regex101.com/r/myvyS0/1

Python:

str.extract(r'(.+(?=,)|\S+$)', expand=False)

推荐阅读