Текст и повседневные инструменты · Текстовый инструментарий
Группы захвата регулярных выражений в поиске и замене: измените порядок дат с помощью $1, $2, $3
· Как это работает
регулярное выражение найти и заменить даты
Показывает, как круглые скобки фиксируют части совпадения и как $1, $2 и $3 повторно используют их при замене, используя классическую перезапись даты ISO на день-месяц-год и несколько других переупорядочений.
Четыреста дат в неправильном порядке — почему ручное редактирование 2024-01-02 в 02/01/2024 — это работа для групп захвата
Экспорт электронной таблицы может оставить четыреста дат в порядке год-месяц-день в стиле ISO, когда рабочий лист в Великобритании ожидает день/month/year.. Редактирование `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,, затем сверяется количество замен с количеством строк
Вставьте экспортированный столбец, включите Regex, введите `(\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 обработает ее.
Что здесь не распространяется — именованные группы, просмотр назад и названия месяцев, для которых требуется таблица поиска.
Нумерованные группы могут переупорядочивать текст, уже присутствующий в совпадении, но они не могут преобразовать `Jan` в `01`, поскольку для этого требуется поиск, а не изменение порядка. В этой статье также не используются именованные группы или ретроспективный анализ, чья полезность и поддержка браузерами предполагают другой набор вариантов, чем эта простая очистка экспорта.
Выражение даты проверяет форму, а не календарную истинность. Он будет соответствовать `2024-99-88`, поскольку каждой меньшей группе соответствуют две цифры. Проверьте даты в электронной таблице или исходной системе, если правильность имеет значение. Функция «Найти и заменить» подходит для единообразного форматирования, а не для проверки достоверности каждого захваченного месяца и дня.
Вывод: один шаблон, одна замена, исправление каждой строки в Text Toolkit одновременно с возможностью отмены, если результат не соответствует ожиданиям.
Группы захвата превращают одну совпавшую строку в фрагменты многократного использования. Для столбца с единой датой три группы сохраняют исходные год, месяц и день, а `$3/$2/$1` размещает их в порядке Великобритании. Глобальный поиск обрабатывает все совпадения, а сообщаемое количество обеспечивает немедленную проверку количества строк, которые вы намеревались изменить.
Обеспечьте возможность проверки рабочего процесса: сохраните копию экспорта, используйте самый узкий шаблон, который подходит для него, сравните количество, проверьте несколько результатов и отмените операцию, если данные не совпадают с вашими ожиданиями. Одна хорошо продуманная замена может устранить повторяющееся редактирование, не притворяясь, что каждое цифровое значение автоматически является действительной датой.