【发布时间】:2020-07-13 17:51:20
【问题描述】:
我在将一封信中的正确日期用作文档时遇到了问题。 原因是 grep 文档创建日期,而不是文本中的任何其他日期。
通常文件包含有关公司的信息,我的地址,客户编号,账单编号...... 以及创建日期。
可能会再次在日期内打招呼和/或文本。
文档开头的日期通常如下所示。
- 以 1999 年 12 月而不是 3.12.1999 为例。
如果我在模式的情况下 grep 日期
'(([0-9][0-9]{,1}\.)\s+('Januar'|'Februar'|'März'|'April'|'Mai'|'Juni'|'Juli'|'August'|'September'|'Oktober'|'November'|'Dezember')\s+([1-9][0-9][0-9][0-9]{1,}))'
有时会得到错误的日期作为创建日期。原因是文件中日期的不同写法。 示例 1 是我通常得到的,当我搜索具有正确模式的日期(创建日期)时,它工作正常。 示例 2 有问题,因为我得到了一个日期,但它不是第一个日期的创建日期。相反,我从文本中得到另一个与模式匹配的日期。
我可以在示例 2 中使用不同的模式 '(([0-9][0-9]{,1}\.)([0-9][0-9]{,1}\.)([1-9][0-9][0-9][0-9]{1,}))' grepping 正确的日期,但我会遇到与示例 1 相同的问题。
我的想法是仅在模式匹配取日期时才在前 n 行中搜索,否则使用不同的模式。
我没有得到pdfgrep 的规则,只使用前 n 行,这让我有可能使用不同的模式。
有人知道如何解决吗?
干杯,梦想
【问题讨论】:
-
你有没有考虑过使用
|(或)连接的两种模式?这将识别与任一模式匹配的第一个日期出现,这似乎是您想要的...... -
用文本替换图像,然后将该输入的所需输出(无描述)添加到您的问题(无评论)。
-
@bdream :如果您在前 n 行中找到两个日期,则您将搜索限制在其中,哪一个是正确的?如果作者决定写在前 n 行之后,你如何找到日期?也许你应该在整个文档中搜索看起来像“创建日期行”的行(日期前面可能有很多空格?)并从中取出第一个,不管它在哪一行。顺便说一句,有些人写日期在文档的末尾,靠近最后的问候。
-
@hmm 你是对的 - 谢谢我可以使用
pdfgrep -o --max-count 1 '(([0-9][0-9]{,1}\.)([0-9][0-9]{,1}\.)([1-9][0-9][0-9][0-9]{1,}))|('Datum:')\s+(([0-9][0-9]{,1}\.)([0-9][0-9]{,1}\.)([1-9][0-9][0-9][0-9]{1,}))|(([0-9][0-9]{,1}\.)\s+('Januar'|'Februar'|'März'|'April'|'Mai'|'Juni'|'Juli'|'August'|'September'|'Oktober'|'November'|'Dezember')\s+([1-9][0-9][0-9][0-9]{1,}))' *.pdf找出装配日期。必须考虑如何在找到什么样的日期时切换到不同的程序部分。 -
@user1934428 你说得对,但就我而言,我有几份文件,而且我喜欢在第一页的前 1/3 内使用日期。