pandas - series.str.extract 正在删除捕获组的第一个字符
Posted
技术标签:
【中文标题】pandas - series.str.extract 正在删除捕获组的第一个字符【英文标题】:pandas - series.str.extract is dropping the first character of the capture group 【发布时间】:2021-03-25 16:53:20 【问题描述】:我需要从下一个系列中提取日期:
0 03/25/93 总访问时间(以分钟为单位):\n 1 名 6/18/85 初级保健医生:\n 2 sshe 计划自 7/8/71 起搬家 上门服务... 3 7 于 9/27/75 审核 C 分数 当前:\n 4 2/6/96 睡眠研究疼痛治疗疼痛等级 (N... 5 .Per 7/06/79 运动 D/O 注释:\n 6 4, 5/18/78 患者对当前 SU 的看法... 7 10/24/89 CPT 代码:90801 - 精神病诊断... 8 3/7/86 SOS-10 总分:\n 9 (4/10/71)Score-1Audit C 分数 当前:\n 10 (5/11/85) Crt-1.96, BUN-26; AST/ALT-16/22;白细胞... 11 4/09/75 SOS-10 总分:\n 12 8/01/98 与转诊医生沟通... 13 1/26/72 与转诊医生沟通... 14 5/24/1990 CPT 代码:90792:有医疗服务... 15 1/25/2011 CPT 代码:90792:带医疗服务... 16 4/12/82 总访问时间(以分钟为单位):\n 17 1; 10/13/1976 审计 C 分数,最高/日期:\n
我正在尝试使用以下正则表达式
df.str.extract('.(\d1,4/\d1,4/\d1,4).')
但是,既然我指定了 1,4,为什么它会删除前两个数字中的第一个数字?
例如,从第 7 行到第 17 行,它应该分别提取“10/24/89”和“10/13/1976”,而不是“0/24/89”和“0/13/1976”
我也在尝试在捕获组的开头添加一个“?:”,但它不起作用
先谢谢了!
【问题讨论】:
我认为您正面临正则表达式“贪婪”与“懒惰”的问题。 ***.com/q/2301285/6361531 哇!这是一个快速反应斯科特。我只需要添加一个“?”在星号之后。非常感谢! df.str.extract('.*?(\d1,4/\d1,4/\d1,4).*') 【参考方案1】:我会在日期周围设置单词边界,即使用这种模式:
\b(\d+/\d+/\d+)\b
更新代码:
df['date'] = df['col'].str.extract('\b(\d+/\d+/\d+)\b')
这是一个regex demo,表明上述模式工作正常。
【讨论】:
以上是关于pandas - series.str.extract 正在删除捕获组的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章