使用正则表达式,我需要匹配特定日期格式以外的所有内容

时间:2018-11-09 15:00:57

标签: regex regular-language

下午,长时间的潜伏者/观看者和第一次问:)都在努力解决以下问题,并希望在此问题上有所帮助。

我已经使用过正则表达式,现在需要将其实现为我正在参与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函数忽略该日期以外的所有内容。

任何帮助将不胜感激,请询问您是否需要任何进一步的说明。

谢谢您的协助。

1 个答案:

答案 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。