![](/img/trans.png)
[英]Regex to read Invoice Line Details from line with space delimiter and spaces in description
[英]RegEx pattern to capture invoice line items containing unit prices in description
使用 C#,我试图从包含所有行项目的文本块中提取单个发票行项目。 对于每个行项目,我想分离并捕获行项目代码、行项目描述和行项目美元金额。 问题是许多订单项描述包含类似于美元金额的小数金额,因此我使用的正则表达式将几个完整的订单项捕获到一个订单项描述中。 如何更改我的正则表达式语句以在描述中包含这些十进制数字,同时仍将价格分隔到另一个匹配组中? 我也愿意接受其他优化建议
这是给我带来麻烦的订单项块:
1244 Drayage Charge MEDU2265085
1,875.00
4083 Chassis MEDU2265085 TRIAXLE 4 DAYS
640.00
1268 Pre-Pull MEDU2265085
250.00
1248 Truck Waiting & Over Time MEDU2265085 3.5*120
420.00
1244 Drayage Charge MEDU3325790
1,875.00
4083 Chassis MEDU3325790 TRIAXLE 4 DAYS
640.00
1268 Pre-Pull MEDU3325790
250.00
1248 Truck Waiting & Over Time MEDU3325790 2.38*120
285.60
1244 Drayage Charge MSCU3870551
1,875.00
4083 Chassis MSCU3870551 TRIAXLE 4 DAYS
640.00
1268 Pre-Pull MSCU3870551
250.00
1248 Truck Waiting & Over Time MSCU3870551 3.5*120
420.00
这是我对正则表达式模式的最佳尝试:
(?<LINE_ITEM_CODE>[0-9]{4})[\r\s\n](?<LINE_ITEM_DESCRIPTION>[A-Za-z0-9\r\s\n\-\%\&\*\.]*)[\r\n\s](?<LINE_ITEM_AMOUNT>[0-9\,]{1,7}.[0-9]{2})
如果您在 regexr.com 或 regexstorm.net 上输入这些内容,您会看到多个行项目被捕获为单个行项目描述。 我之前使用的替代方案不适合 3.5、2.38 等。如何在将其他小数分组到描述中的同时定位价格?
我愿意接受替代解决方案
您可以使用
(?m)^(?<LINE_ITEM_CODE>\d{4})\s+(?<LINE_ITEM_DESCRIPTION>.*?)\r?\n(?<LINE_ITEM_AMOUNT>\d{1,3}(?:,\d{3})*\.\d{2})
请参阅正则表达式演示。
详情:
(?m)^
- 使^
匹配一行开头的多行标志(?<LINE_ITEM_CODE>\d{4})
- 组“LINE_ITEM_CODE”:四位数字\s+
- 一个或多个空格(包括换行符)(?<LINE_ITEM_DESCRIPTION>.*?)
- 组“LINE_ITEM_DESCRIPTION”:除换行符外的任何零个或多个字符尽可能少\r?\n
- CRLF 或 LF(?<LINE_ITEM_AMOUNT>\d{1,3}(?:,\d{3})*\.\d{2})
- 组“LINE_ITEM_AMOUNT”:一到三位数字,然后重复零次或多次逗号和三个数字,然后是一个点和两个数字。 `
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.