我已经看过这个答案和这个答案以试图找出我的问题,但是我不确定它们是否直接适用,因为a)我没有始终必须满足的条件,并且b)文档太乱了,以至于任何三个匹配都可能导致大量误报。
因此,话虽如此,这是我的问题。我有一些要匹配的文本行,如下所示:
x = "10/04 Some brief description blah blah blah 45.00"
一切之间的间隔都是凌乱的。然后,我想匹配一些文本行,如下所示:
y = "VJ../VI Another stupid brief description 1000.00"
z = "11/13 This is another description LO05.13"
我当前使用的正则表达式是这样的:
regex = r"^(\d\d\s?[1/]\s?\d\d\s?[1/]\d\d)\s+(\S+(?:\s+\S+)*?)\s+(-?\s?[\d,]+\.\d\d)"
问题在于iny
regex
不匹配,因为字符串的开头没有日期。OCR流程混乱了。但是,我们仍然知道这是有效行,因为它具有描述和金额。两者regex
都不匹配z
,因为金额不是一堆数字,但是我们知道这是一笔交易,因为有日期和说明。
我已经考虑过将正则表达式更改为如下形式:
regex = r"^(\d\d\s?[1/]\s?\d\d\s?[1/]\d\d\s+)?(\S+(?:\s+\S+)*?)\s+(-?\s?[\d,]+\.\d\d)?"
但是我担心这将与文档中的所有内容(即“提款和借方”)相匹配。由于文本行的两个可选部分位于文本更一致的部分的相对两端,所以我不确定如何|
像我所链接问题的解决方案中那样实现。
我最好的选择就是只制作两个与链接的正则表达式|
吗?
regex = r"^(\d\d\s?[1/]\s?\d\d\s?[1/]\d\d\s+)?(\S+(?:\s+\S+)*?)\s+(-?\s?[\d,]+\.\d\d)|^(\d\d\s?[1/]\s?\d\d\s?[1/]\d\d)\s+(\S+(?:\s+\S+)*?)\s+(-?\s?[\d,]+\.\d\d)?"
任何援助将不胜感激。谢谢
使用OCR输入,很难制定出100%安全的方法。在没有实际输出的情况下,我们只能提出有关如何处理每个具体案例的一般思路。
在这里,我建议
r'^(\w+[^\s/]*/\w{2}\b.*?)\s*(\d+\.\d{2})$'
该模式是一种通用模式:
^
-字符串/行的开头(\w+[^\s/]*/\w{2}\b.*?)
-1+个字母数字符号或下划线(也许\w+
可以用代替\w
),后跟0+个非空格和非/
字符,后跟/
,然后正好2个“单词”字符,后跟一个单词边界\b
,然后尽可能少地0 +换行符以外的字符\s*
-0+空格(\d+\.\d{2})
-最终的浮点数,整数部分可以有1+个数字,小数部分可以有2个数字$
-字符串/行末 本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句