我正在开展一个项目,我必须阅读财务报表的扫描图像。我使用 tesseract 4 将图像转换为文本输出,如下所示(这是一个片段):
收入 9,000,000 900,000
销售成本 900,000 900,000
毛利润(90%;2016 年 - 90%) 900,000 900,000
我想将上面的内容分成三个条目的列表,其中第一个条目是文本,然后第二个和第三个条目是数字。例如,第一行看起来像这样:
[[REVENUE], [9,000,000], [9,000,000]]
我遇到了这个堆栈溢出帖子,其中有人尝试使用 re.match()
到 .groups()
方法来查找模式:How to split strings into text and number?
我刚刚接触正则表达式,并且正在努力正确理解语法和文档。我现在正在尝试使用备忘单,但我很难弄清楚如何解决这个问题,请帮忙。
最佳答案
我通过观察你的第一个预期输出编写了这个正则表达式。但我不确定你的第三句话想要的输出是什么。
([A-Za-z ]+)(?=\d|\S)
匹配名称,直到找到数字或符号。.*?
表示我们不关心的字符串([\d,]+)\s([\d,]+|(?=-\n|-$))
匹配一组或两组数字,如果有只有一组数字,该组应该以换行符或文本结尾结尾。
测试代码(已编辑):
import re
regex = r"([A-Za-z ]+)(?=\d|\S).*?([\d,]+)\s([\d,]+|(?=-\n|-$))"
text = """
REVENUE 9,000,000 900,000
COST OF SALES 900,000 900,000
GROSS PROFIT (90%; 2016 - 90%) 900,000 900,000
Business taxes 999 -
"""
print(re.findall(regex,text))
# [('REVENUE ', '9,000,000', '900,000'), ('COST OF SALES ', '900,000', '900,000'), ('GROSS PROFIT ', '900,000', '900,000'), ('Business taxes ', '999', '')]
关于python - 使用 REGEX 读取财务报表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53663439/