我有一個來自資料日志的文本檔案,該檔案應該是資料行,填充空格,使每行長度為 197 個字符并以 LF 結尾。缺少一些 LF,因此下一行與上一行相連。例如,第 1 行很好,第 2 行缺少 LF,所以第 3 行加入到它(還有幾行!):
IO.Unit._1.BottomBoard.Iin._1.AmpsA ,Current A Pump 1 ,29,57.80 ,0001641474794.344049,0000356036
PumpControl.Pump._1.PumpReverse.Reversing ,Pump 1 Reversing ,28,2875 ,0001641474794.026816,0000356035Faults.Pump._1.ThermalOverload.Status.Active ,Pump 1 Tripped ,24,1 ,0001641474793.000000,0000356034Faults.Pump._1.NotInAuto.Status.Active ,Pump 1 Unavailable ,24,1 ,0001641474793.000000,0000356033Faults.Pump._1.Flow.LowFlowFault.Status.Active ,Pump 1 Low Flow ,24,2 ,0001641474792.000000,0000356032Faults.Pump._1.Flow.LowFlowFault.Status.Active ,Pump 1 Low Flow ,24,4 ,0001641474792.000000,0000356031Faults.Pump._1.Flow.LowFlowFault.Status.Active ,Pump 1 Low Flow ,24,3 ,0001641474734.000000,0000355950IO.Unit._1.BottomBoard.Iin._1.AmpsB ,Current B Pump 1 ,29,0.00 ,0001641474724.555403,0000355949
有沒有一種簡單的方法來查找字符 198 何時不是 LF 并插入 LF?我在 NotePad 中嘗試過 RegEx 搜索/替換:
查找:(.{197}!\r)
替換為:$1\r\n
這不會回傳任何命中。如果我沒有!\r,它會找到每一行(因為它們都是 197 個字符長)。
我一直在手動添加 LF,但我想我有幾千行這樣的行......僅在這個檔案中......!所以我真的很想自動化這個。
我可以使用 RegEx 來:
查找:(.{197})
替換為:$1\r\n
但這會將 \n 附加到每一行。我可以使用 NotePad 洗掉空白行,但我想知道是否有更聰明的方法。
謝謝你的幫助!
uj5u.com熱心網友回復:
正如評論所提到的,使用實際的編程語言會比正則運算式更可靠。但是,如果您無法使用編程語言,這里有一個應該可以作業的正則運算式。
(.{197})(?!(?:\r|\n))
演示
(.{197}) - Grab the first 197 characters of the line
(?!(?:\r|\n)) - negative lookahead. If the 198th character is a \n or \r it won't match
錨定問題
正則運算式沒有錨定在行首,并且從頭開始計算 197 個字符。如果您想從行的開頭錨定并捕獲該行中的所有記錄,您需要執行以下操作:
^(?:(.{197})(?!(?:\r|\n))){1,}
使用此版本的問題是{1,}“替換”正則運算式通常不支持重復組語法。
uj5u.com熱心網友回復:
只需更改您的“查找”正則運算式以可選地匹配尾隨換行符序列:
Find: (.{197})(\r\n)?
Replace: $1\r\n
這將始終匹配(.{197}),但只有\r\n在它存在時才匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410297.html
標籤:
