Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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

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 正则表达式中的意外结果-我缺少什么?_Python_Regex - Fatal编程技术网

Python 正则表达式中的意外结果-我缺少什么?

Python 正则表达式中的意外结果-我缺少什么?,python,regex,Python,Regex,我正在尝试提取此表单的免疫记录: Immunization: Tetanus Other: Booster Method: Injection Date Received: 07 Jan 2013 Immunization: TETANUS DIPTHERIA (TD-ADULT) Date Received: 07 Dec 2012 @ 1155 Location: PORTLAND (OR) VAMC Reaction:* None Reported Comm

我正在尝试提取此表单的免疫记录:

Immunization: Tetanus
Other: Booster 
Method: Injection
Date Received: 07 Jan 2013
Immunization:   TETANUS DIPTHERIA (TD-ADULT)
Date Received:  07 Dec 2012 @ 1155
Location:       PORTLAND (OR) VAMC
Reaction:*      None Reported
Comments:       1234567 
以及本表格:

Immunization: Tetanus
Other: Booster 
Method: Injection
Date Received: 07 Jan 2013
Immunization:   TETANUS DIPTHERIA (TD-ADULT)
Date Received:  07 Dec 2012 @ 1155
Location:       PORTLAND (OR) VAMC
Reaction:*      None Reported
Comments:       1234567 
这是我的模式字符串:

"Immunization:(.*?)\n[.\n*?]*?Date Received:(.*?)\n"
这是识别第二个模式并提取疫苗名称和日期,而不是第一个模式。我以为
[.\n*?]*?
会考虑这两种可能性(在疫苗名称和疫苗接种日期之间有其他字段…或没有…但这似乎没有起到作用。我的正则表达式有什么问题,以及我如何修复它?

您可以使用:

import re
matches = re.findall(r"Immunization:\s+(.*?)\s+.*?Date Received:\s+(.*?)$", subject, re.IGNORECASE | re.DOTALL | re.MULTILINE)
|


正则表达式解释: 您可以使用:

import re
matches = re.findall(r"Immunization:\s+(.*?)\s+.*?Date Received:\s+(.*?)$", subject, re.IGNORECASE | re.DOTALL | re.MULTILINE)
|


正则表达式解释:

在pythex上使用多行和DOTALL测试了这一点:

输入

模式:
免疫:\s+(\w+).*?接收日期:\s+([^\n]+)

比赛1
  • 破伤风
  • 2013年1月7日
  • 比赛2
  • 破伤风
  • 2012年12月7日@1155

  • 在pythex上使用多行和DOTALL测试了这一点:

    输入

    模式:
    免疫:\s+(\w+).*?接收日期:\s+([^\n]+)

    比赛1
  • 破伤风
  • 2013年1月7日
  • 比赛2
  • 破伤风
  • 2012年12月7日@1155

  • 在[.\n]中的.in被视为文字“.”,而不是任何字符的符号。这就是为什么免疫接种后的日期行被接受,但您无法跳过不是换行符或点的字符

    (.*\n)*
    我想到的是以最接近您已有的方式帮助您解决问题。但是,有这么多嵌套*有点遗憾,因为这意味着解析记录需要很长的时间,作为一个人,我也发现这更难理解。可能最好在每个循环开始时都使用一个文本,以帮助您做出决策应完全输入/继续

    如果我当时没有搞砸的话

    Immunization:(.*?)(\n.*)*\nDate Received:(.*)\n
    

    如果没有左递归,则只会在行的开头检测到“Date Received”。

    in[.\n]被视为文字“.”,而不是任何字符的符号。这就是为什么免疫接种后的日期行会被接受,但不能跳过不是换行符或点的字符

    (.*\n)*
    我想到的是以最接近您已有的方式帮助您解决问题。但是,有这么多嵌套*有点遗憾,因为这意味着解析记录需要很长的时间,作为一个人,我也发现这更难理解。可能最好在每个循环开始时都使用一个文本,以帮助您做出决策应完全输入/继续

    如果我当时没有搞砸的话

    Immunization:(.*?)(\n.*)*\nDate Received:(.*)\n
    

    如果没有左递归,则“接收日期”只会在行的开头检测到。

    您使用的标志是什么?多行?您如何在
    和strip spaces和
    *
    处拆分行。您可以轻松地从数据生成字典。请尝试
    免疫:\s+(.+?)\n.*接收日期:\s+(.+?)\n
    使用dotall标记时,您使用的是什么标记?多行?您如何在
    处拆分行,并在
    *
    处拆分空格。您可以轻松地从数据生成字典。请尝试
    方法:\s+(.+?)\n.*接收日期:\s+(.+?)\n
    带有dotall标志谢谢。你能解释一下为什么这样做吗?特别是,不包括任何关于换行符的内容是怎么回事吗?非常欢迎@randode。我已经用正则表达式解释更新了答案,在这种情况下,你应该使用
    re.dotall | re.MULTILINE
    标志.GL!谢谢。你能解释一下吗为什么这样做?特别是,不包括任何关于新行的内容是怎么回事?非常欢迎@RandoDoe。我已经用正则表达式解释更新了答案,在这种情况下,你应该使用
    re.DOTALL | re.MULTILINE
    flags.GL!