文本和日常工具·文本工具包
查找和替换中的正则表达式捕获组:使用 $1、$2、$3 重新排序日期
· 工作原理
正则表达式 查找和替换 日期
显示括号如何捕获匹配的部分,以及 $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` 将它们按英国顺序排列。全局搜索处理所有匹配项,报告的计数可以立即检查您想要更改的行数。
保持工作流程可审查:保留导出的副本,使用适合它的最窄模式,比较计数,检查多个结果,并在证据与您的期望不一致时撤消。一种范围明确的替换可以消除重复编辑,而无需假装每个数字形状的值自动都是有效日期。