Notepad++ 中的正規表示式字串格式

Notepad++ 中的正規表示式字串格式

我很擅長正規表達式,但有一件事我似乎無法弄清楚它是如何運作的。

如何在 NotePad++ 中進行搜尋/取代並確保輸出具有固定長度,而輸入可以靈活?

例如,對此執行正規表示式:23-6-2016變為:23-06-2016(06 額外 0,但如果是 12 則不額外)

另一種選擇是創建它:

TestStringTest會變成
TestString______________________(額外的空格。)
Test____________________________(額外的空格。)

當然,這裡的想法是進行批量搜尋/替換,其中輸出都具有相同的長度。

請解釋一下背後的想法。

編輯:為了了解我正在使用的數據,這是我需要處理的範例行:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

請注意,它們是用製表符分隔的。第一行中的第一個 0 應格式化為 0,00,100 應格式化為 100,00,但 12345678 和日期不應格式化為 ,00 最後 100,5 應格式化為 100,50

我已經解決了約會的問題,所以現在這不那麼重要了。

答案1

回應:

12345678 TXT 19700101 0 100 20160624 100 評論文本
12345678 TXT 19700101 100 100,25 20160624 0,25 評論文本
12345678 TXT 19700101 100,25 100,5 20160624 0,25 評論文本

對於第四列:
^((?:\S+\s+){3}\d+)(\s)\1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)\10\2

對於第5/7列:
與上方類似,只需在規則中分別替換{3}{4}/{6}

解釋
第一條規則

第一條規則附加,0到不帶 . 的數字,。現在所有數字都必須有,\d.

第二條規則

第二條規則將 a 附加0到逗號後的單一數字後面。

至於(?:):非捕獲組,前面的列已經被捕獲,\1因此不需要額外的捕獲。

這只會將數字填入小數點後兩位。若要填入任意數量,請使用該pad excessively, then trim方法。

最後一句?
在我看來,notepad++ 中的普通正規表示式不足以完成此任務。一些基本的腳本(例如 bash 或 perl)可以以更高的可讀性處理這個問題。

答案2

A 部分:墊至特定長度

若要使用正規表示式右邊填入包含 N 個字元的行,請在行末尾新增 N 個空格,然後將前 N 個字元分組以取代其餘字元。

第 1 遍:新增填充字符

尋找:$取代:______________________________

在行尾增加 30 個空格。 (我使用下劃線,因為空格不會在帖子上格式化)。

第 2 遍:修剪剩餘 30 個字符

若要在行首填入短劃線分隔的日期,請相應地匹配每個部分。

尋找:^([[:print:]]{0,30}).*$ 替換為\1

在行的開頭,將一組最多 30 個可列印字元替換為該組,後面跟著任何剩餘字元。

若要選擇不同的線長度,請在第 1 遍中使用 n 空格,然後將 30 替換為第 2 遍中的長度。

B 部分:以日期開頭的行

第 1 次(每月的某一天):

尋找內容:^([0-9])- 已取代為:0\1-

將模式(以單一數字開頭,後面跟著破折號的行)替換為填滿的零、數字和破折號。

通過2(月)

尋找內容:-([0-9])- 已取代為:-0\1-

將模式(兩個破折號之間的單一數字)替換為破折號、填滿的零、數字和破折號。

相關內容