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

采购单Regex提取优化:行项目单条匹配及数量统一捕获

采购单数据提取正则优化方案

优化后的正则表达式

string pattern = @"
# 匹配头部:Seq No信息
Seq No:\s+(\d{4})\s+(\d+)
|
# 匹配头部:采购单号
Purchase Order\n(\d+)
|
# 匹配头部:文档编号(如xxxx-xxx-Dxxxx格式)
(\d{4}-\d{3}-D\d{3,4})
|
# 匹配头部:截止日期+请求方
Due:\s+(\d{2}/\d{2}/\d{4})\s+Requester:\s+([A-Z]{3})
|
# 匹配头部:单独请求方信息
Requester:\s+([A-Z]{3})
|
# 匹配行项目格式1:带尺寸+数量+EA+Drawing
\d\.\d{2}\s+\d\.\d{2}\s+(\S+)\s+EA\s+(.*?)\s+Drawing
|
# 匹配行项目格式2:EA开头+数量+Drawing
EA\s+(\S+)\s+(.*?)\s+Drawing
";

核心优化说明

1. 解决行项目拆分问题

原正则通过多|分割零散匹配片段,导致同一行项目的不同字段被拆分成独立匹配结果。优化后将完整行项目结构作为单个匹配分支,确保每一行项目对应一个独立的匹配结果,直接对应Excel的一行数据。

2. 统一数量捕获逻辑

针对采购单中两种数量格式:

  • 格式1:EA 100 Drawing(数量紧跟EA)
  • 格式2:x.xx x.xx 50 EA Drawing(数量在EA之前)

优化后通过两个行项目分支,将数量统一指向可捕获的分组(第6或第7分组)。如果希望更直观,可改用命名分组版本:

string pattern = @"
Seq No:\s+(?<SeqPrefix>\d{4})\s+(?<SeqNum>\d+)
|
Purchase Order\n(?<PO>\d+)
|
(?<DocNum>\d{4}-\d{3}-D\d{3,4})
|
Due:\s+(?<DueDate>\d{2}/\d{2}/\d{4})\s+Requester:\s+(?<Requester>[A-Z]{3})
|
Requester:\s+(?<Requester>[A-Z]{3})
|
\d\.\d{2}\s+\d\.\d{2}\s+(?<Qty>\S+)\s+EA\s+(?<Drawing>.*?)\s+Drawing
|
EA\s+(?<Qty>\S+)\s+(?<Drawing>.*?)\s+Drawing
";

使用命名分组时,可直接通过match.Groups["Qty"].Value提取数量,无需判断分组索引,代码可读性更高。

使用提示

  • 启用RegexOptions.IgnorePatternWhitespace选项,可忽略正则内的注释和换行,同时保留代码可读性;若不需要注释,可将正则压缩为单行。
  • 若采购单存在其他行项目格式变体,可在对应分支中补充调整匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:05:25