Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在dates.txt上执行正则表达式_Python_Regex - Fatal编程技术网

Python 在dates.txt上执行正则表达式

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患者对当前药物滥用

以下数据是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患者对当前药物滥用的想法:
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
    是一个字符串列表,而不是单个字符串。因此需要首先将列表中的元素
    连接在一起。我已更新了答案。