簡體   English   中英

使用Regex和Powershell返回文件的多行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM