如何修正正则表达式以正确捕获信用卡账单的负号分组?
信用卡账单正则提取负值问题解决方案
修改后的正则表达式
^(\d{2}/\d{2})\s+(.*?)\s+([-+]?)\s?(\d{1,3}(?:\.\d{3})*(?:,\d+)?)\r?\n(.*)
核心修改说明
- 将描述分组的贪婪匹配
.*改为非贪婪匹配.*?:贪婪匹配会尽可能捕获所有字符,导致负号被归入描述组;非贪婪匹配会在遇到后续的符号/数值时停止,确保负号被单独捕获到符号分组。 - 明确匹配换行符
\r?\n:确保账单的分类信息(如SAÚDE .RECIFE)被精准捕获到最后一个分组,避免多余空白字符干扰。
匹配结果验证
针对你的两条账单数据:
第一条数据:
16/04 RC GRACAS 2 - 0,02
SAÚDE .RECIFE
捕获结果:- 分组1(日期):
16/04 - 分组2(描述):
RC GRACAS 2 - 分组3(数值符号):
- - 分组4(数值):
0,02 - 分组5(分类):
SAÚDE .RECIFE
- 分组1(日期):
第二条数据:
16/04 RC GRACAS 2 02/03 45,97
SAÚDE .RECIFE
捕获结果:- 分组1(日期):
16/04 - 分组2(描述):
RC GRACAS 2 02/03 - 分组3(数值符号):``(空值)
- 分组4(数值):
45,97 - 分组5(分类):
SAÚDE .RECIFE
- 分组1(日期):
Notepad++转CSV操作提示
在Notepad++的替换功能中:
- 勾选「正则表达式」模式
- 替换目标输入:
"$1","$2","$3","$4","$5" - 执行替换后即可将每条账单转为标准CSV行。
内容的提问来源于stack exchange,提问作者andresantacruz
相关产品推荐
相关产品推荐

