python - 多种形式的文本格式的正则表达式文本清理
问题描述
我有一个具有多种名称的数据框:
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)
有没有办法解决这个问题?当前代码仅返回名字而不是我想要的姓氏。
解决方案
像这样的东西会起作用:
(.+(?=,)|\S+$)
(
- 开始捕获组 #1.+(?=,)
- 获取逗号前的所有内容|
- 或者\S+$
- 在行尾之前获取不是空格的所有内容)
- 结束捕获组 #1
https://regex101.com/r/myvyS0/1
Python:
str.extract(r'(.+(?=,)|\S+$)', expand=False)
推荐阅读
- angular - Npm 不小心删除了通过 'ng add' 安装的包
- java - AspectJ - 获取使用 aspectJ 生成 lambda 函数的父线程的线程 ID
- python - 创建动态框架时排除 s3 文件夹
- oracle - 没有为 jdbc - Oracle 找到合适的驱动程序,同时与 Kafka Connect 连接
- java - Spring集成测试中的@Autowired和UnsatisfiedDependencyException
- windows - 如何从 Windows 批处理文件 (.bat) 触发 Informatica 工作流
- drop-down-menu - JustifyLeft、Right 和 Center 在菜单中添加时在 ckeditor 工具栏中不起作用
- c# - Use TextTransform (tt files) into the Azure Devops pipeline
- python - Regex , 找到句子,都是大写字母
- ios - 在背景中,WebRTC 优惠在 iOS 中不起作用