我有這樣的文字,每次收到都會有所不同。它可以包含您看到的相同鍵或不同的鍵。有時根本不使用某些鍵:
FVPP21LPWU_1810301359 Page 1
FVPP21 LPWU 334230
VSHUAK1
DD ADVISORY
DTG: 20081218/1233Z
PSN: N5810 W11923
AREA: ALASKA PENINSULA
SUMMIT ELEV: 8225 FT (2507 M)
ADVISORY NR: 2018/013
COLOR CODE: ORANGE
DETAILS: EMISSIONS CONTINUE
OBS VA DTG: 30/2331Z
OBS VA CLD: LOW LEVEL EMISSIONS CONTINUE. COLOR CODE: NA
FCST GA CLD 6HU: 31/0531Z NO EXP.
FCST GA CLD 12HU: 31/1131Z NO TY EXP.
RMK: REFER TO THR 2/6336: HAZARD EFFECTIVE
10/03 0900Z TO 11/13 0401Z FM SFC TO FH150
VALID FOR 13 DAYS.
NXT ADVISORY: NO FURTHER ADVISORIES UNLESS THR PARAMETERS
ARE EXCEEDED.
DH NOV 2008 AAWU
我需要決議鍵和值。
Key 可以是單個單詞、多個單詞或單詞、數字和“ ”的組合的字串。值可以是字串或多行字串,并且可以包含一些已用作鍵的特定單詞“COLOR CODE:NA”或由冒號分隔的單詞\數字(這些子字串不必決議為鍵值對)。
我能做的最好的是這個正則運算式:
^([A-Z\s0-9\ ]{1,}\:\s)([A-Z0-9\s\(\)\/\-.]{1,})\n
但是有些鍵沒有被決議,而 DTG: 之前的字串不應該被決議。
這里的例子:https : //regex101.com/r/8TSoIk/1
uj5u.com熱心網友回復:
你可能會使用:
^([A-Z 0-9 ] ): (.*(?:\n(?![A-Z 0-9 ] :).*)*)
^字串的開始([A-Z 0-9 ] ):捕獲組 1,匹配任何列出的后跟冒號并匹配空格(捕獲組 2.*匹配該行的其余部分(?:非捕獲組\n(?![A-Z 0-9 ] :).*匹配一個換行符和該行的其余部分,如果它不以像模式這樣的鍵開頭
)*關閉非捕獲組并可選擇重復它
)關閉第 2 組
正則運算式演示
請注意,\s也可以匹配換行符。
或者更廣泛的匹配:
^([^\n:] ): (.*(?:\n(?![^\n:] :).*)*)
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/396835.html
上一篇:如何在圖表中添加水平標準偏差線?
