我們發送帶有 INV 前綴的銷售發票。一些客戶在沒有前綴的情況下支付發票。在這種情況下,我想添加前綴以讓 ERP 系統識別這些付款。日期示例如下。
:61:2204210421C1339,57NMSCTOPF2510474511//GBBK031SCT TOPF2510474511
:86:RGT FACT 17133 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE :61:2204270427C4808,37NMSCTOPF2520477320//GBJ6009SCT
TOPF2520477320 :86:RGT FACT 17274.17442.17546 TANQ BROERS SA/ RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2203290329C5518,16NMSCTOPF2485471711//GBCJ001SCT TOPF2485471711 :86:RGT FACT.16794 16918 17079 TANQ BROERS SA/RGT39370 T'ABCNACE
我需要輸出為:
:61:2204210421C1339,57NMSCTOPF2510474511//GBBK031SCT TOPF2510474511 :86:RGT FACT INV17133 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2204270427C4808,37NMSCTOPF2520477320//GBJ6009SCT TOPF2520477320
:86:RGT FACT INV17274 . INV17442。INV17546 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE :61:2203290329C5518,16NMSCTOPF2485471711//GBCJ001SCT TOPF2485471711 :86:RGT FACT。INV16794 INV16918 INV17079 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
我制作了這個腳本,但它只匹配第一個 invoicenumber。我如何將它們全部匹配到一個組中?
(:61:[0-9]{1,6}[0-9]{4}C[0-9] \,[0-9]?[0-9]?)(NMSC. )(\r?\n:86:RGT FACT.{1})([\d]{5})
付款說明總是相似的,但并不總是完全一樣。訂單將是這樣的,但我不確定他們是否總是使用點來分隔發票編號。
uj5u.com熱心網友回復:
您可以使用\G錨點來獲得最后 5 位數字的連續匹配,由空格或點分隔。
請注意,您可以{1}從模式中省略,并省略.after FACT 因為它成為重復使用的一部分\G
(?:(:61:[0-9]{1,6}[0-9]{4}C[0-9] ,[0-9]{0,2})(NMSC. )(\r?\n:86:RGT FACT)|\G(?!^))[ .](\d{5})
解釋
(?:非捕獲組(:61:[0-9]{1,6}[0-9]{4}C[0-9] ,[0-9]{0,2})(NMSC. )(\r?\n:86:RGT FACT)你的初始模式|或者\G(?!^)在上一場比賽結束時(而不是開始時)斷言位置
)關閉交替[ .](\d{5})匹配空格或點并捕獲 5 位數字
請參閱Powershell 演示和正則運算式演示。
例子
$input = @"
:61:2204210421C1339,57NMSCTOPF2510474511//GBBK031SCT TOPF2510474511
:86:RGT FACT 17133 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2204270427C4808,37NMSCTOPF2520477320//GBJ6009SCT TOPF2520477320
:86:RGT FACT 17274.17442.17546 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2203290329C5518,16NMSCTOPF2485471711//GBCJ001SCT TOPF2485471711
:86:RGT FACT.16794 16918 17079 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
"@
$input -replace '(?:(:61:[0-9]{1,6}[0-9]{4}C[0-9] ,[0-9]{0,2})(NMSC. )(\r?\n:86:RGT FACT)|\G(?!^))[ .](\d{5})' ,'$1$2$3 INV$4'
輸出
:61:2204210421C1339,57NMSCTOPF2510474511//GBBK031SCT TOPF2510474511
:86:RGT FACT INV17133 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2204270427C4808,37NMSCTOPF2520477320//GBJ6009SCT TOPF2520477320
:86:RGT FACT INV17274 INV17442 INV17546 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
:61:2203290329C5518,16NMSCTOPF2485471711//GBCJ001SCT TOPF2485471711
:86:RGT FACT INV16794 INV16918 INV17079 TANQ BROERS SA/RGT39370 TANQ BROERS SA48 AVENUE D'ABCDE
uj5u.com熱心網友回復:
@Thefourthbird 在評論中給出了答案,它運行良好,我使用以下腳本調整MT940陳述句并將其投入生產:
(Get-Content -Path $fileName -Raw) -replace '(?:(:61:[0-9]{1,6}[0-9]{4}C[0-9] ,[0-9]{0,2})(NMSC. )(\r?\n:86:RGT FACT)|\G(?!^))[ .](\d{5})' ,'$1$2$3 INV$4' | Set-Content -Path $fileName
如果MT940字串INV以:86:RGT FACT.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479792.html
上一篇:匹配N組正則運算式中的特定字母
