Python 在dates.txt上执行正则表达式
以下数据是date.txt中的一个片段: 任务是以以下格式提取日期:04/20/2009、04/20/09、4/20/09、4/3/09 如果数据是作为单个字符串导入的,则正则表达式有效Python 在dates.txt上执行正则表达式,python,regex,Python,Regex,以下数据是date.txt中的一个片段: 任务是以以下格式提取日期:04/20/2009、04/20/09、4/20/09、4/3/09 如果数据是作为单个字符串导入的,则正则表达式有效 df='' 93年3月25日总就诊时间(分钟): 1985年6月18日初级保健医生: sshe计划自1971年7月8日起搬迁至家庭服务:无 7于1975年9月27日审计C分数当前: 2/6/96睡眠研究主要治疗疼痛程度(数字量表):7 .根据79年6月7日的移动D/O注释: 4、5/18/78患者对当前药物滥用
df=''
93年3月25日总就诊时间(分钟):
1985年6月18日初级保健医生:
sshe计划自1971年7月8日起搬迁至家庭服务:无
7于1975年9月27日审计C分数当前:
2/6/96睡眠研究主要治疗疼痛程度(数字量表):7
.根据79年6月7日的移动D/O注释:
4、5/18/78患者对当前药物滥用的想法:
1989年10月24日CPT代码:90801-精神病诊断面谈
3/7/86 SOS-10总分:
(4/10/71)分数-1当前的音频C分数:
(5/11/85)Crt-1.96,BUN-26;AST/ALT-16/22;WBC_12.6日常生活活动(ADL)沐浴:独立
1975年9月4日SOS-10总分:
'''
pattern=re.compile(r'\d{0,2}[/]\d{1,2}[/]\d{2,4}')
matches=pattern.finditer(df)
对于匹配中的匹配:
打印(匹配)
但是,使用open()导入数据时,正则表达式不起作用
doc=[]
打开('dates.txt')作为文件:
对于文件中的行:
单据追加(行)
df=pd.系列(文件)
测向头(10)
pattern=re.compile(r'\d{0,2}[/]\d{1,2}[/]\d{2,4}')
matches=pattern.finditer(df)
对于匹配中的匹配:
打印(匹配)
为什么会这样?我得到的错误是:
--------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
1 pattern=re.compile(r'\d{0,2}[/]\d{1,2}[/]\d{2,4}')
---->2个匹配项=pattern.finditer(df)
3对于比赛中的比赛:
4打印(匹配)
TypeError:应为字符串或类似字节的对象
错误消息是不言自明的:finditer
方法希望第二个参数是字符串
或类似对象的字节,但您正在向其传递一个系列
的实例。由于您已经将文件作为字符串读入doc
变量,因此您的代码应该是:
matches=pattern.finditer(''.join(doc))
此外,您的正则表达式真的应该是:
r'\d{1,2}/\d{1,2}/\d{2}(?:\d{2})?'
\d{1,2}
匹配1或2位数字。您让\d{0,2}
将月份设置为可选月份(例如允许匹配/5/2020
),这确实不是您想要的
/
匹配正斜杠。不需要使用[/]
(尽管这并没有错),如果您想允许使用多个分隔符,例如[/-]
,这将更有用
\d{1,2}
匹配1或2位数字
/
匹配正斜杠
\d{2}(?:\d{2})
匹配2或4位数字(匹配2位数字,可选后接2位数字)。这比匹配2、3或4位数字更精确
此外,创建由文本文件中的每一行组成的字符串列表的更“Pythonic”(且更有效)的方法是:
with open('dates.txt') as file:
doc = [line for line in file]
此时使用pandas
是否有任何用途?如果没有,请将整个文件作为单个字符串读取:
with open('dates.txt') as file:
doc = file.read()
之后就不需要进行任何换行操作。什么不起作用?你想做什么?预期结果是什么?实际结果是什么?显示一些代码并包含一个。例如,你如何在数据帧上应用搜索?请编辑你的问题以澄清你希望实现的目标。在开始之前这个正则表达式的作用是:“您需要一些文本,例如,“我希望匹配描述日期或月和年的dt
的所有子字符串,即:”,后面是您希望匹配的字符串。此外,尽可能缩短字符串dt
。永远不要说一些代码”不起作用“。解释它不正确的作用。matches=pattern.finditer(doc)不起作用。错误->类型错误:使用df.str.extractall(r'\d{1,2}/\d{1,2}/\d{2}(?:\d{2})')时需要字符串或类似于object的字节)也会产生错误。ValueError:pattern不包含捕获组对此我很抱歉。我忘记了doc
是一个字符串列表,而不是单个字符串。因此需要首先将列表中的元素连接在一起。我已更新了答案。