You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#正则表达式拆分银行交易语句:金额与描述未分离问题咨询

问题分析与解决方案

问题根源

你的正则表达式中,(.*)采用贪婪匹配模式,会尽可能匹配更多字符。由于后续的交易金额分组((\-[\d.,]+)?和(\$[\d.,]+)?)是可选的(带?修饰符),正则引擎会优先让.*吞噬掉交易金额部分,导致描述和金额无法分离。比如第二个交易场景中,Repayment/Payment $100.00会被.*整体匹配,而非拆分出描述和金额。

修正后的正则表达式

((\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (20\d{2}))(.*?)(?:(\-[\d.,]+)|(\$[\d.,]+))?\s*(\$[\d.,]+)

关键调整说明

  • 将贪婪的(.*)改为非贪婪的(.*?):匹配到交易金额的起始符号(-或$)就停止,避免吞噬金额部分
  • 用(?:(\-[\d.,]+)|(\$[\d.,]+))?整合交易金额的两种格式:通过非捕获组(?:)统一处理负金额(-开头)和正金额($开头)的分支,确保正则能准确识别两种交易金额,同时减少冗余分组
  • 保留最后的(\$[\d.,]+)匹配余额部分,确保三种场景都能正确提取余额

场景测试验证

  1. 期初余额场景:01 Sep 2025 Opening balance $10,000.00 DR

    • 描述分组:Opening balance(可通过Trim()去除首尾空格)
    • 交易金额分组:空值(符合期初无交易金额的逻辑)
    • 余额分组:$10,000.00
  2. 还款/付款场景:02 Sep 2025 Repayment/Payment $100.00 $10,100.00 DR

    • 描述分组:Repayment/Payment
    • 交易金额分组:$100.00
    • 余额分组:$10,100.00
  3. 利息扣除场景:03 Sep 2025 Interest charged -300.00 $9,800.00 DR

    • 描述分组:Interest charged
    • 交易金额分组:-300.00
    • 余额分组:$9,800.00

C# 使用提示

在C#中调用时,可通过Regex.Match获取匹配结果,对分组值调用Trim()处理首尾多余空格,再将有效字段写入CSV文件。

内容的提问来源于stack exchange,提问作者Warez Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 18:24:52