【发布时间】:2013-01-06 01:47:30
【问题描述】:
我正在使用 pdf-reader 阅读我的每月财务记录。我感兴趣的所有行都以描述开头,然后是日期##/##/####,然后是两美元的金额 $#.## $#.##。
像这样:
Gas Station 12/12/2012 $68.00 $485.00
有时这些数字会有括号 $(4.50) 表示退货或负数。我希望所有符合此“模式”的行都作为每行 4 项列表返回。因此,我将整条线与不确定数量的空格相匹配,偶尔还会在价格上加上括号。
require 'pdf-reader'
reader = PDF.Reader.new("month.pdf")
reader.pages.each do |page|
page.split("\n").each do |line|
if line # MATCHING REGEX HERE
#HANDLE 4 VALUES FROM REGEX
end
end
对于任何想了解我如何使用代码的人来说,这里是源代码https://github.com/danielpclark/INGdirect_pdf_processor。随意在您自己的项目中使用它来处理银行数据。
【问题讨论】:
-
您尝试过任何正则表达式吗?什么有效?什么没有?
-
你为什么还要使用正则表达式?如果所有内容都在列中,为什么不在空白处拆分行? *.com/questions/13537920/ruby-split-by-whitespace
-
(.*)\s+(\d{2}\/\d{2}\/\d{4})\s*(\(?\$.\d+\.\d+\)?)\s+(\(?\$.\d+\.\d+\)?)这对我有用。 PDF 有很多其他垃圾数据,例如银行图像、大量信息和其他一些分类数据。所以空白分割对我不起作用。 -
我插入了来自@Andrea Singh 的模式,并使用了来自@the Tin Man
pattern=Regexp.new('(.*)\s+(\d{2}\/\d{2}\/\d{4})\s*(\(?\$.\d+\.\d+\)?)\s+(\(?\$.\d+\.\d+\)?)')line.scan(pattern)的扫描建议,这在一个可用的列表/数组中给了我想要的输出。