用于OCR清理的正则表达式

时间:2020-01-21 22:39:32

标签: python regex

我一直在对一些书进行数字化,并希望清理目录。我的输出看起来像这样:

Lorem ipsum dolor sit amet, consectetur 
adipiscing elit.
(January 1, 2008)
Neque porro quisquam est qui dolorem 
ipsum quia dolor
(June 30, 2007)361
Finibus Bonorum et Malorum
(July 3, 2008)398

我想使用\)\d*\n*分隔单个文章,但是如何匹配此字符串?

某些页码丢失,并且某些标题(例如Neque porro quisquam est qui dolorem ipsum quia dolor)已打印在多行上。

理想情况下,我想将它们分成Finibus Bonorum et Malorum (July 3, 2008)398之类,以提取标题,日期和页码。

很抱歉提出这样一个基本问题!预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式提取不同部分:

(.*?)(?=\([^\)]*\)\d*(?:\n|$))\(([^)]*)\)(\d*)(?:\n|$)

它具有3个捕获组:

  1. 直到第一个(为止的所有文本,之后只有一个),可选数字和行尾或字符串结尾(这样,它将与具有{{1}的标题一起使用};
  2. ((之间的文本;
  3. )之后至换行符或字符串末尾的任何数字。

用法示例:

)

输出:

import re

txt = '''Lorem ipsum dolor sit amet, consectetur 
adipiscing elit.
(January 1, 2008)
The 39
steps
(June 30, 2007)361
A title with
a (bracketed) word
(April 1, 2020)34
Finibus Bonorum et Malorum
(July 3, 2008)398'''
pattern = re.compile(r'(.*?)(?=\([^\)]*\)\d*(?:\n|$))\(([^)]*)\)(\d*)(?:\n|$)', re.S)
print(pattern.findall(txt))

答案 1 :(得分:0)

清理文本是一项艰巨的工作。可以使用正则表达式替换像这样将提供的样本合并为一个

[
 ('Lorem ipsum dolor sit amet, consectetur \nadipiscing elit.\n', 'January 1, 2008', ''),
 ('The 39\nsteps\n', 'June 30, 2007', '361'),
 ('A title with\na (bracketed) word\n', 'April 1, 2020', '34'),
 ('Finibus Bonorum et Malorum\n', 'July 3, 2008', '398')
]

代码示例

([\w ,]+)\n(?:([\w ,.]+)\n)?(\(\w+ \d+, \d+\)\d*)

Online Demo