繁體中文

文字與日常工具·文字工具包

尋找和取代中的正規表示式擷取群組:使用 $1、$2、$3 重新排序日期

· 工作原理

正規表示式 尋找和替換 日期

三個捕獲的日期欄位從年-月-日轉換為日-月-年順序
原始 ToolAcre 向量圖

顯示括號如何捕捉符合的部分,以及 $1、$2 和 $3 如何在替換中重複使用它們,使用經典的 ISO 到日月年日期重寫和一些其他重新排序。

四百個日期的順序錯誤 - 為什麼手動編輯 2024-01-02 到 02/01/2024 是捕獲組的工作

當英國工作表預計日為 /month/year. 時,電子表格匯出可能會以 ISO 樣式的年月日順序留下 400 個日期,手動將 `2024-01-02` 編輯為 `02/01/2024` 的速度很慢,但更大的風險是不一致:一個跳過的行或轉置報告為止。

尋找和替換可以將每個日期視為相同的部分排列,而不是視為四百個不相關的字串。正規表示式標識年、月和日,而替換則以另一種順序寫回這些捕獲的部分。原始數字被重複使用,因此操作會更改結構而不是重新輸入值。

括號捕獲的內容 - 每個組如何從左到右獲取數字,以及 \d{4} 和 \d{2} 匹配什麼

括號建立捕獲組。在 `(\d{4})-(\d{2})-(\d{2})` 中,第一組捕獲四位數字,第二組捕獲兩位,第三組捕獲兩位。 `\d` 表示此 JavaScript 模式中的數字,而 `{4}` 和 `{2}` 指定每個群組內所需的確切重複次數。

當引擎從左到右讀取時,群組從每個左括號接收數字。對於 `2024-01-02`,群組 1 是 `2024`,群組 2 是 `01`,群組 3 是 `02`;連括號符號與分隔符號之外,它們與分隔符號相符,但它們與分隔符號相符;

在替換中使用 $1、$2 和 $3 — 使用新分隔符號以新順序重建匹配

替換 `$3/$2/$1` 要求 JavaScript 插入第三個捕獲、一個斜杠、第二個捕獲、另一個斜杠和第一個捕獲。應用到該範例中,這些引用會產生 `02/01/2024`。美元參考是替換說明,而不是也必須出現在匹配日期中的文字。

ToolAcre 將替換字串傳遞給標準 JavaScript 字串替換操作。其來源明確支援編號引用,例如 `$1`、`$2` 和 `$3`,且搜尋模式是全域編譯的。這個全域標誌就是為什麼每個匹配日期都在一次操作中重寫而不是僅第一個匹配的原因。

工作範例 - (\d{4})-(\d{2})-(\d{2}) 替換為 $3/$2/$1, 然後根據行計數檢查替換計數

貼上匯出的列,打開正規表示式,在「尋找」中輸入 `(\d{4})-(\d{2})-(\d{2})`,在「取代」中輸入 `$3/$2/$1`。選擇「全部替換」首先會對匹配項進行計數,然後重寫它們,因此結果會報告整個貼上文字中更改了多少個日期形狀的字串。

在將結果複製回電子表格之前,將該數字與預期行數進行比較。較低的計數指向空白或其他格式的日期;計數越高意味著其他地方的類似文字也匹配。該工具沒有取代預覽,因此如果計數或輸出顯示過於寬泛的模式,請使用其撤銷操作。

更多重新排序 - 將“姓氏、名字”更改為“名字姓氏”,並交換两列列表中的列

當每一行可靠地包含一個逗号時,同樣的原理可以將 `Surname, Forename` 更改為 `Forename Surname`:找到 `([^,]+), ([^\r\n]+)` 並替換為 `$2 $1`。這裡,每個組捕獲已知分隔符號一側的文字,而不是假設固定數量的數字。

儘管有粗略的措辭,但兩列交換不是內建表格操作。僅當粘贴的文字具有可靠的分隔符並模式安全地描述行邊界時,它才起作用。名称內的逗号、缺失的欄位或不一致的分頁需要清理或更精确的模式,然後才能进行任何批量替換值得信赖。

僅當輸入具有可靠的分隔符號時才能進行更多重新排序

模式中的点几乎表示任何字符,因此寫入為 `(\d{4}).(\d{2}).(\d{2})` 的日期模式也接受欄位之間的斜杠、空格或字母。將文字点轉义為 `\.` ,並在其他元字符應與自身匹配時轉义它们。报告無效括号或未完成的括号,但不更改文字。

群組編號從 1 開始,而不是 0。美元符號也有特殊的替換意義:`$&` 插入整個匹配項,`$$` 產生一個字面美元符號。即使正則表達式模式關闭,此行為也适用,因為 ToolAcre 僅轉义搜索端;在 JavaScript 處理替換字符串之前,它不會轉义它。

這不包括什么 - 需要查找表的命名組、lookbehind 和月份名称

編号組可以重新排列匹配中已存在的文字,但它们無法將 `Jan` 轉換為 `01`,因為這需要查找而不是重新排序。本文也不依賴命名組或lookbehind,其有用性和瀏覽器支援涉及與此簡單匯出清理不同的一組選擇。

日期表達式檢查形狀,而不是日曆真相。它將匹配 `2024-99-88` 因為兩個數字滿足每個較小的群組。當正確性很重要時,請驗證電子表格或來源系統中的日期。查找和替換适用于一致的格式,而不是證明每個捕獲的月份和日期有效。

要点 — 一種模式,一種替換,在文字工具包中立即修複每一行,如果結果不是您所期望的,則可以撤消

捕獲組將一個匹配的字串轉換為可重複使用的片段。對於統一的日期列,三個組保留原始年、月和日,而 `$3/$2/$1` 將它們按英國順序排列。全域搜尋處理所有符合項,報告的計數可以立即檢查您想要更改的行數。

保持工作流程可审查:保留匯出的副本,使用适合它的最窄模式,比较計數,檢查多個結果,並在證據與您的期望不一致時撤消。一種範圍明確的替換可以消除重複編輯,而無需假裝每個數字形狀的值自動都是有效日期。