[英]Using Regex and Powershell to Return Multiple Lines of a File
我正在使用正則表達式返回文件的一部分。 這是文件的樣子:
L1*4***13258
S5*1*CL*9587*L*756*CA*1603*E
G62*10*20190124*Y*1210*LT
NTE*GEN*Pallets: FLOORLOADED
N1*SF*FLOWERS BAKING CO OF LAKELAND, INC.
N3*3355 WEST MEMORIAL BLVD
N4*LAKELAND*FL*33815*US
OID*HAI-60657-20190121*HAI-60657**CA*756*L*9587
S5*2*CU*9587*L*756*CA*1603*E
G62*68*20190125*Z*1200*LT
NTE*GEN*Pallets: FLOORLOADED
N1*ST*HAINES CITY
N3*2651 HWY 17
N4*HAINES CITY*FL*33844*US
OID*HAI-60657-20190121*HAI-60657**CA*756*L*9587
L3*9587*G*********756*L
我想返回從“ S5”的首次出現到“ L3”的第一次出現的所有內容。 我正在使用的正則表達式現在可以獲取正確的選擇,但是將它們全部返回一行。 這是代碼:
$pattern = "S5(.*?)L3"
$string = Get-Content $file.FullName
$result = [regex]::match($string, $pattern).Groups[1].Value
$result
當我運行它時,我得到:
*1*CL*9587*L*756*CA*1603*E G62*10*20190124*Y*1210*LT NTE*GEN*Pallets: FLOORLOADED N1*SF*FLOWERS BAKING CO OF LAKELAND, INC. N3*3355 WEST MEMORIAL BLVD N4*LAKELAND*FL*33815*US OID*HAI-60657-20190121*HAI-60657**CA*756*L*9587 S5*2*CU*9587*L*756*CA*1603*E G62*68*20190125*Z*1200*LT NTE*GEN*Pallets: FLOORLOADED N1*ST*HAINES CITY N3*2651 HWY 17 N4*HAINES CITY*FL*33844*US OID*HAI-60657-20190121*HAI-60657**CA*756*L*9587
這是我正在尋找的正確反饋,但不幸的是,它似乎並不尊重新行,而所有內容都歸為一行。
有沒有人建議保留它以保留新行?
非常感謝。
您需要更改的兩件事:
為了使Get-Content
返回一個大的多行字符串,請使用-Raw
開關參數:
$string = Get-Content $file.FullName -Raw
現在,由於我們有多行字符串,因此我們需要指示regex引擎在使用時匹配換行符.
-我們可以使用s
regex選項來做到這一點:
$pattern = "(?s)S5(.*?)L3"
現在,這將按預期工作:
$result = [regex]::Match($string, $pattern).Groups[1].Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.