将正则表达式与 Tika 在 python 中读取的 pdf 中的文本字符串一起使用 - 试图找到以 \n\n\n\n 结尾的行

Using regex with text string from pdf read by Tika in python - trying to find line that ends in \n\n\n\n

我扫描了很多页文档,使用 OCR 使它们成为机器可读的,然后使用 Python 3 中的 Tika 包阅读它们,return 是我标记为 "fulltext." 我正在尝试 return 所有匹配此模式的文本:

事件描述:(bla bla bla) \n\n\n\nStudent

作为参考,这是我要捕获的段落的样子:

事件描述:\n学生做 bla bla bla。学生\nbla bla bla bla。 Bla bla bla bla \nbla bla。 \n\n\n\n! \nI \n\n.\'=fll\nBLABLA \n\nSCHOOL \n\n\'1 \n\n学生是 bla 和/或 bla? \n是O 否~ \n是,附上报告。 \n\n是否在事件发生后的 24 小时内通知了家长/监护人? Yes:1 / \n否:r:J· \n\n是bla bla bla bla吗? YesO Noif \n\nCC: \n\nDistrict Qt\'" . / \nParent/Guardian\'EJ \n0therO \n\nh[t/ I lf \nDate \n\n (pis\, 1.-1 \n日期 \n\n\n\nStudent 姓名:

总是以"Description of Incident"开始,以“\n\n\n\nStudent”结束。所以我不想捕捉“\n\n\n\n!”的部分。在中间。

我试过这个:

    desc = re.findall("Description of Incident:+.\n\n\n\n", fulltext)
    print(desc)

但我得到一个空列表。

但是,如果我这样做:

    desc = re.findall("Description of Incident:+.", fulltext)

然后我得到一个重复 ['Description of Incident: '] 多次的列表

如果我这样做:

    desc = re.findall("\n\n\n\n", fulltext)

然后我确实得到 ['\n\n\n\n'] 多次

最后,如果我这样做:

    desc = re.findall("Description of Incident:.+\n.+", fulltext)

然后我得到了段落的一部分,但只得到了第二个\n。 示例:['Description of Incident: \nStudent did bla bla bla. Student ']

使用转义字符没有帮助。

尝试 运行 在 DOT ALL 模式下查找所有搜索,并稍微更改您的模式:

desc = re.findall("Description of Incident:.*?\n\n\n\n(?=Student\b)", fulltext, re.DOTALL)

这似乎有效,至少对于您的示例输入数据。请注意,该模式现在表示要匹配和消耗从 Description of Incident: 到换行符的所有内容,直到到达第一个 \n\n\n\n ,然后是(但确实包括)文本 Student.