Преобразование регистра, различие, подсчет, экранирование и очистка пробелов в тексте.
Списки текста приходят в плохом состоянии. Столбец электронной почты, вставленный из электронной таблицы, имеет конечные пробелы в каждой строке. В отрывке журнала есть повторяющиеся строки. Список, скопированный из PDF, имеет жесткие разрывы строк в середине предложений. Ни одна из этих задач не является сложной, но решать их вручную на протяжении четырехсот строк — это ужасно, а поиск языка сценариев для одноразовой очистки происходит медленнее, чем кажется.
Здесь все работает с текстом в поле выше. Каждая кнопка представляет собой одно преобразование, примененное ко всему тексту, и каждое из них можно отменить. Работайте небольшими шагами и проверяйте подсчеты по ходу дела.
Порядок имеет большее значение, чем люди ожидают. Обрезка перед дедупликацией почти всегда правильна: две строки, которые отличаются только конечным пробелом, не являются дубликатами, пока вы их не обрежете, поэтому предварительное удаление дубликатов автоматически оставляет их обе на месте.
Точно так же удалите пустые строки перед сортировкой, если вы хотите получить компактный результат, поскольку пустые строки сортируются в один конец и оставляют пробел, который вам все равно придется удалить.
Панель статистики обновляется по мере ввода. Большая часть этого не требует пояснений, но количество символов заслуживает внимания, потому что это число, которое большинство инструментов ошибается.
Компьютеры хранят текст как последовательность кодовых единиц, и один видимый символ может занимать несколько из них. Смайлик 👩💻 — это то, что вы можете видеть, но он состоит из смайлика женщины, невидимого соединения и смайлика ноутбука — всего пять кодовых единиц. Наивный счетчик сообщает 5. Этот инструмент подсчитывает кластеры графем, что является техническим названием того, «как человек называет один символ», поэтому он сообщает 1.
Та же логика применима к символам с диакритическими знаками, написанным с помощью комбинированных знаков, а также к помеченным эмодзи. Если вы учитываете ограничение, которое накладывает другая система — столбец базы данных, шлюз SMS, социальная платформа — имейте в виду, что другая система вполне может учитываться по-другому.
Кнопки извлечения извлекают электронные письма, URL-адреса или номера из неструктурированного текста и предоставляют их в виде чистого списка, дедуплицированного и упорядоченного по порядку появления.
Извлечение URL удаляет пунктуацию в конце предложения, поэтому «посещение https://example.com." дает URL без точки и останавливается на закрывающей круглой скобке, поэтому внутренние скобки URL выходят чистыми.
Сопоставление адресов электронной почты является намеренно прагматичным, а не исчерпывающим. Полная спецификация действительного адреса электронной почты допускает конструкции, которые практически никто не использует, и сопоставление всех из них дает худшие результаты для реального текста, чем более строгий шаблон.
Преобразовать «Hello World» в CamelCase очень просто. При преобразовании parseHTTPResponse2Json инструменты расходятся во мнениях, поскольку границы подразумеваются, а не отмечаются.
Этот инструмент разделяет три сигнала: любой набор небуквенных и нецифровых символов (пробелы, дефисы, подчеркивания, знаки препинания); строчная буква или цифра, за которой следует прописная буква; и набор прописных букв, за которыми следует пара прописных и строчных букв. Это последнее правило - это то, что правильно отделяет «HTTP» от «Response» в parseHTTPResponse, вместо того, чтобы создавать p-a-r-s-e-h-t-t-p-ответ или рассматривать всю аббревиатуру как одно слово, приклеенное к другому.
В результате parseHTTPResponse становится parse_http_response в случае змеи и parse-http-response в случае кебаба, чего и ожидает большинство руководств по стилю.
В заголовке первая буква каждого слова пишется заглавной, а остальные — строчными, поэтому «привет WORLD» становится «Hello World». Он не знает о правилах руководства по стилю, которые сохраняют короткие слова, такие как «of» и «the» в нижнем регистре, потому что эти правила различаются в зависимости от публикации, и применение одного из них молча было бы предположением.
В регистре предложений все пишется строчными буквами, а затем первая буква каждого предложения становится заглавной, определяя окончание предложений на точках, вопросительных и восклицательных знаках, включая их полноширинные эквиваленты CJK. Это правильный выбор для текста, поступившего в ALL CAPS.
Преобразование слизняка создает URL-безопасный идентификатор: строчные буквы, акценты сложены к их основным буквам, а каждая серия небуквенно-цифровых символов заменяется одним дефисом.
Складывание акцентов осуществляется путем разложения символов и удаления знаков объединения, поэтому «Café Crème» становится «cafe-creme», а не «caf-cr-me». Полное удаление букв с диакритическими знаками — распространенная ошибка в генераторах слизней, которая искажает имена.
Начальные и конечные разделители удаляются, а эмодзи и другие символы удаляются, поскольку они не имеют полезного представления URL.
Функция «Найти и заменить» имеет два режима. Литеральный режим (по умолчанию) экранирует каждый специальный символ, поэтому при поиске «a.b» будет найден именно «a.b», а не «axb». Режим Regex передает ваш шаблон как есть.
Каждый вводимый вами шаблон компилируется внутри охранника. Если он недействителен, вы получите сообщение с объяснением проблемы, и ваш текст останется нетронутым. Это имеет большее значение, чем кажется: ввод регулярного выражения — это инкрементальный процесс, а одинокий знак «(» — это совершенно нормальное промежуточное состояние на пути к рабочему шаблону. Инструмент, который в этот момент выдает необработанную ошибку — или, что еще хуже, очищает поле — непригоден для использования.
В режиме регулярного выражения замена поддерживает группы захвата с $1, $2 и т. д. Канонический пример — переформатирование дат: найдите (\d{4})-(\d{2})-(\d{2}) и замените на $3/$2/$1, чтобы превратить 2024-01-02 в 02/01/2024.
Параметр «Все слово» ограничивает ваш поиск границами слов, поэтому поиск по слову «кот» соответствует слову «кот», но не «коту» внутри слова «объединить».
Он работает в обоих режимах. В буквальном режиме ваш текст сначала экранируется, а затем ограничивается; в режиме регулярного выражения весь ваш шаблон ограничен как группа, поэтому чередования, такие как cat|dog, ведут себя так, как вы ожидаете, а не привязывают границу только к первой ветке.