下午,长时间的潜伏者/观看者和第一次问:)都在努力解决以下问题,并希望在此问题上有所帮助。
我已经使用过正则表达式,现在需要将其实现为我正在参与OCR的项目的一部分。
背景
我目前正在研究一种解决方案,其中我们正在对文档执行Zonal OCR以捕获文档日期。很好,我们可以准确地捕获日期。但是,根据文档内容,“日期”字段可能会在文档中向下移动。因此,我们必须在文档中沿行设置一个区域,以检测列中文本的位置。反过来,这将捕获我们不需要/不需要的文本,而删除此错误捕获的文本的唯一选择是“替换”功能(支持正则表达式匹配)和正则表达式的组合。
问题
作为流程的一部分;一旦我们捕获了文本,我将需要执行“替换”功能,我特别希望替换除某些字符模式外的所有文本/字符/符号/换行符等。在这种情况下:
\d\d[.]\d\d[.]\d\d\d\d
或
[0-9][0-9][.][0-9][0-9][.][0-9][0-9][0-9][0-9]
虽然我可以很好地匹配此模式,但除上述模式外,我无法获得任何RegEx代码来成功匹配任何内容。 (在这一点上,我将不确定我正在使用的产品中使用的正则表达式的风格。文档并不是最好的方法:(因此,我可能需要找到多种解决方案来测试哪种解决方案有效如果有人知道测试,我可以确定我喜欢的味道。)
以下是OCR组件捕获的文本示例:
"» Susi
Date of ti
31.10.2018
To preserve
test is 31.0E
Location"
除了日期“ 31.10.2018”之外,我想在此处匹配所有内容。然后,我以后可以使用replace函数忽略该日期以外的所有内容。
任何帮助将不胜感激,请询问您是否需要任何进一步的说明。
谢谢您的协助。
答案 0 :(得分:1)
让我们使用以下表达式:
\d\d[.]\d\d[.]\d\d\d\d
如果以后要使用日期值,则要捕获匹配的部分。您可以通过在方括号周围放置圆括号来做到这一点,如下所示:
(\d\d[.]\d\d[.]\d\d\d\d)
现在,让我们尝试匹配一行中的所有内容,然后然后日期。正则表达式中的“任何字符”为.
,其中任意数量为.*
。现在我们有了:
(.*)(\d\d[.]\d\d[.]\d\d\d\d)
这将匹配任何内容,然后匹配日期。您会发现在组1中捕获了您的“任何内容”,在组2中捕获了日期。如果不匹配,则该行上没有日期。
在线上有多个日期时,就会出现问题。根据偏好,任何东西是尽可能多的,因此,如果有两个日期,您会在第1组(任何东西)中找到其中一个,在第2组中找到第二个日期。根据您的需要,您可以在?
后面加上一个*
,使其变为非贪婪,然后您会得到:
(.*?)(\d\d[.]\d\d[.]\d\d\d\d)
,然后,如果匹配,则第2组将是第一个可用日期,而第1组将是其前一行的内容。
最后,您可以使用所用的任何一种语言将其重复应用于一行,直到不匹配为止:这样,每次您将在组1中获得“日期之前的内容”,并在组中获得日期2。