我正在做一个项目,我必须阅读财务报表的扫描图像。我使用tesseract 4将图像转换为文本输出,如下所示(以下是一个片段):
收入90000000900000
销售成本900000 900000
毛利润(90%;2016-90%)900000 900000
我想把上面的内容分成三个条目,第一个条目是文本,第二个条目和第三个条目是数字。例如,第一行如下所示:
[[REVENUE], [9,000,000], [9,000,000]]
我遇到了这个堆栈溢出帖子,其中有人试图使用re.match()
到{
我刚刚被介绍给regex,我正在努力正确理解语法和文档。我现在正试着用备忘单,但我很难弄清楚该怎么做,请帮忙。在
检测字符串
并提取值
^{pr2}$你会的
让我们解开这根大绳子。在
[A-Z]
表示查找从A
到{0
到{,
。这里的-
是一个在方括号内用来表示我们想要的字符范围的运算符。在+
运算符意味着查找紧跟在它前面的任何事物的至少一个事件。例如,表达式[A-Z]+
表示查找A
到Z
中的任何一个。您还可以使用*
运算符来查找前面任何内容的至少零次。在([A-Z+])
表示查找A
到{x
之后,我们通过执行x.groups()
来访问它。在[[TEXT], [NUMBER], [NUMBER]]
,它是直接适应的。方括号是用\
字符转义的,因为我们希望将它们从字面上解释为而不是字符范围。在re.match()
函数将在rev_str
中搜索给定模式与匹配的任何位置,跟踪匹配中的组,并在调用x.groups()
时返回这些组。在这是一个相当简单的例子,但你必须从某个地方开始,对吗?您应该能够使用它作为一个起点,来创建一个更复杂的regex表达式来处理更多的代码。在
正如您所说的,regex对于这个问题来说太过了。在
最后两个项目之前的
text.split()
和join
更适合于此。在
^{pr2}$out
将包含如果标签文本需要进一步提取,您可以使用regex,或者您可以简单地查看
parts[0:len(parts)-2]
中的项并根据其中的单词和数字进行处理。在我通过观察您的第一个预期输出编写了这个regex。但我不确定你对第三句话的期望输出是什么。在
([A-Za-z ]+)(?=\d|\S)
匹配名称,直到找到一个数字或符号。在.*?
对于我们不关心的字符串([\d,]+)\s([\d,]+|(?=-\n|-$))
匹配一组或两组数字,如果只有一组数字,则该组应以换行符或文本结尾结尾。在测试代码(已编辑):
相关问题 更多 >
编程相关推荐