我扫描了许多页面的文档,使用OCR使它们机器可读,然后使用Python 3中的Tika包阅读它们,该包返回一个我标记为"全文"的冗长凌乱的字符串。我正在尝试返回与此模式匹配的所有文本:
事件描述: (
呸呸呸呸呸呸呸呸呸�作为参考,这就是我要捕获的段落的样子:
事件描述: 学生确实哗啦。学生bla bla bla bla bla。呸��\\!I \.\'=fll BLABLA \SCHOOL \\'1 \是学生bla和/或bla吗?是的哦 否~ lfyes,附上报告。\如果发生事件,是否在 24 小时内通知了家长/监护人?是:1/否: r:J·\是嘭嘭嘭是的,Noif \CC: \District Qt\'" 。/Parent/Guardian\'EJ therO \h[t/I lf Date \(pis\, 1.-1 Date \\学生姓名:
它始终以"事件描述"开头,以"\学生"结尾。所以我不想捕获中间显示"\\!"的部分。
我试过这个:
desc = re.findall("Description of Incident:+.nnnn", fulltext)
print(desc)
但我得到一个空列表。
但是,如果我这样做:
desc = re.findall("Description of Incident:+.", fulltext)
然后我得到一个多次重复['事件描述:"]
的列表如果我这样做:
desc = re.findall("nnnn", fulltext)
然后我确实多次得到 ['\\']
最后,如果我这样做:
desc = re.findall("Description of Incident:.+n.+", fulltext)
然后我得到段落的一部分,但只到第二个。 示例:['事件描述:学生确实唠叨。学生 ']
使用转义字符无济于事。
尝试在 DOT ALL 模式下运行查找所有搜索,并稍微改变您的模式:
desc = re.findall("Description of Incident:.*?nnnn(?=Student\b)", fulltext, re.DOTALL)
这似乎有效,至少对于您的示例输入数据。 请注意,该模式现在说要匹配和使用从跨换行符Description of Incident:
的所有内容,直到到达第一个nnnn
然后是(但确实包括)文本Student
。