[英]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.