【发布时间】:2017-05-03 00:25:02
【问题描述】:
我目前正在使用一个脚本,该脚本通过 PyPDF2 将 PDF 拉入字符串,然后使用正则表达式在该 PDF 中搜索括号中的费用金额。然后在 pd.DataFrame 中汇总和处理这些费用,并将结果输出到 CSV 文件。
在退款之前一切都很好。基本上所有费用都包含在括号内,我会使用 re 来搜索 x 费用,例如。
adminFee = re.findall('Administration Fees\s*\((.*?)\)', data)
然后将其添加到 totalFees 列表中
totalFees = adminFee + govFee + commFee....ect.
然后将列表转换为 DataFrame 以进行操作。
最近,PDF 的格式更改为包含更多费用字符串。这有时也可能构成退款。我用 re 搜索的字符串看起来像这样
""Excess Expenses (Refund from client) (150.00)""
或
""Excess Expenses (Refund from client) 200.00""
我的第一个问题是括号,我尝试了以下无济于事
excessExpenses = re.findall('Excess expenses \(Refund From client\)\s*(\d*\,*\d*\.+\d+\))',data)
但它返回一个空列表 [] ?我已经尝试了几个re,但似乎都没有工作。
我的下一个问题是,以前这些都是所有费用(负金额),但现在包括正值和退款。这与 DataFrame 计算相混淆。我应该如何最好地解决这个问题。我可以回到括号中的先前费用,并通过以下方式将它们设为负数:
adminFee = re.findall('Administration Fees\s*(\(?.*?\)?)',data)
adminFee = ''.join(adminFee)
adminFee = adminFee.replace(',','') #for float manipulation in dataframe
adminFee = adminFee.replace('(','-') # replace ( to make -
adminFee = adminFee.replace(')','') #remove last braket
adminFee = [adminFee] #make list again
然后拉取正数,这将允许正确计算 DataFrame,减少费用并增加退款。
或者跟随另一个根更可取?
我知道这段代码可能是你见过的最不 Python 的代码,但它在过去一年中运行良好。
【问题讨论】:
-
您的正则表达式在“退款”之前的左括号后不包含空格。
-
是的,但我仍然收到一个空列表 '[]' 'excessExpenses = re.findall('ExcessExpenses (/s*Refund From client)\s*(\d*\,*\ d*\.+\d+))',data)' 它仍然取决于 PyPDF2 如何拉取文档,在某些拉取文件中可能有空格,但在其他拉取文件中没有空格。我更关心正则表达式的后半部分。
标签: regex list python-3.x pandas pypdf2