Я большой сторонник глупых побочных проектов по программированию, чтобы изучение новых вещей было менее пугающим. Для меня это обычно влечет за собой бессмысленную игру слов. Прекрасным примером первого кандидата для этой техники обучения является лучший/худший друг каждого человека: регулярные выражения! А если вы похожи на меня и даже отдалённое упоминание регулярных выражений, произносимых на ветру, вызывает у вас стресс, то не пугайтесь, потому что я объясню всё подробно и будет всем весело.

🥄 Что такое спунеризм?

Возможно, я немного забегаю вперед, сначала давайте сделаем некоторую предысторию. Спунеризм — это, как я уверен, некоторые уже знают, вербальная ошибка, когда кто-то случайно переключает начальные два звука фразы из двух слов. Особенно известен спунэризм в потешке «она продает морские раковины на берегу моря», «она продает» — это спунэризм «морские раковины». Глупое имя было придумано от одного

Уильям Арчибальд Спунер, давний преподаватель Оксфорда, который часто совершал эту ошибку, приводящую к таким фразам, как «краснеющая ворона» (от «сокрушительного удара»), «mardon me padom» (от «простите меня, мадам»). Он был альбиносом и страдал от проблем со зрением и чтением, которые, вероятно, сыграли большую роль в его знаменитом спунэризме. Его описывали как «кролика» и характеризовали как несколько рассеянного. Теперь, хотя я и совершал изрядную долю спунеризмов случайно, я предпочитаю целенаправленно искать развлекательные. Если бы я мог заставить свой компьютер найти их для меня, это было бы еще лучше!

🥄Что такое регулярные выражения и зачем их использовать?

Вы можете пропустить эту часть, если понимаете концепцию и основные варианты использования регулярных выражений.

Регулярные выражения, или сокращенно регулярные выражения, — это шаблоны, которым компьютер следует, чтобы сопоставить указанные сегменты строк. Хорошо, это немного многословно, лично мне лучше подходят примеры, поэтому давайте рассмотрим самый простой вариант использования. Давайте сопоставим наше регулярное выражение с буквой, а затем сделаем что-нибудь с этой буквой.

И консоль печатает:

Таким образом, мы можем видеть, что он соответствует самому первому «e» и заменяет его, но не любые другие, потому что по умолчанию регулярные выражения останавливаются при первом совпадении, которое они получают. Чтобы изменить это поведение, мы должны добавить так называемый «модификатор» к объявлению регулярного выражения. Модификаторы добавляются после второй обратной косой черты в объявлении регулярного выражения. Наш новый код выглядит так:

Так что, если бы мы хотели сопоставить все, кроме «е». Для этого мы будем использовать то, что называется метасимволом. Метасимволы обычно используются в сочетании с другими символами для изменения их поведения. Существует огромное количество этих символов из-за того, насколько универсальным может быть регулярное выражение, но прямо сейчас мы рассматриваем символ вставки. (этот малыш ➡ ^)

и, как и ожидалось, наша консоль выводит поразительно уродливую строку из заглавных и строчных букв «е».

Существует так много других операторов регулярных выражений и специальных символов, что было бы практически бесполезно перечислять их здесь. Это должно быть введением в то, насколько полезными могут быть регулярные выражения, и иллюстрацией того, что если вы сосредоточитесь на желаемом результате, задача станет намного менее сложной. Никто не знает всех правил и символов регулярных выражений, потому что их слишком много, чтобы их запомнить.

Гораздо важнее знать, что возможно и как найти нужный инструмент в нужное время, чем строго запоминать вещи. Программируйте мозгом, а не пальцами.

🥄План.

Таким образом, конечная цель состоит в том, чтобы мой компьютер выплевывал в меня ложные выражения из заранее сгенерированного списка фраз.

Итак, на первый взгляд очевидно, что нам понадобится:

а) Большой список фраз из двух слов

б) Способ чтения их в массив

c) Функция, которая берет фразу из двух слов и возвращает спунеризм этой фразы.

г) Возможно, какой-нибудь синтезатор речи для лол-фактора

🥄A) Список фраз

Я буквально только что набрал в Google «фразу из двух слов» и нажал на первый результат.

Поэтому я просто скопирую и вставлю все фразы в текстовый файл в репозитории, в котором работаю.

🥄b)Чтение их в массив

Сначала давайте напечатаем файл на консоли, чтобы мы могли видеть, с чем мы работаем. Я не собираюсь тратить слишком много времени на эту часть кода, потому что это не совсем то, что я пытаюсь практиковать в этом проекте.

Итак, теперь у нас есть список, но у нас есть только вся громоздкая вещь, и нам нужно прочитать ее в массив, поэтому давайте разделим список на каждую новую строку, чтобы изолировать каждую фразу:

.split() тоже возвращает массив!

Теперь, когда мы можем легко изменять их, первое, что я хочу сделать, это избавиться от надоедливых двойных кавычек, чисел и точек. Теперь, когда мы знаем некоторые основы регулярных выражений, давайте применим их с пользой.

это регулярное выражение избавляется от всех символов, которые не являются буквами:

Мы близки, но случайно вырезали все пробелы и все заглавные буквы.

Чтобы решить проблему с пробелами, мы можем использовать другой метасимвол, а чтобы решить проблему с прописными буквами, мы можем использовать модификатор. Подобно оператору or в JavaScript, в регулярных выражениях есть метасимвол or. Поведение по умолчанию для регулярного выражения должно быть «чувствительным к регистру», поэтому оно соответствует нашим заглавным буквам. Итак, с новыми изменениями наше регулярное выражение выглядит так:

символ `\s` читается как пробел, символ `|` является оператором или, а `i` в конце является модификатором, не зависящим от регистра. Итак, наше регулярное выражение говорит: «Я посмотрю на все, что вы мне дадите, независимо от регистра, и найду все, что не является буквой или пробелом». И, наконец, славная консоль:

🥄c) Функция, которая принимает фразу и возвращает спунеризм

Ранее мы использовали `string.split()`, чтобы разделить каждую из фраз на индекс массива в каждой новой строке, чтобы мы могли манипулировать каждой фразой по отдельности. Мы можем сделать то же самое здесь, но разделить его на новую строку. После привязки каждого слова к переменной остальная часть функции не требует пояснений. Вычтите первую букву каждого слова и замените ее первой буквой противоположного слова, а затем верните оба слова, добавленные друг к другу:

🥄d)Празднования!

Весь этот код, а также полный список спунеризмов можно найти по этому URL-адресу: https://repl.it/@jamisonTitan/Spoonerizer, если вы хотите скопировать и вставить его в текст в речь. генератор, то не стесняйтесь, я очень рекомендую его. В конечном счете, мы не сделали здесь ничего полезного. Ни одна компания не наймет меня из-за моего феноменального кода, который меняет местами буквы, но просто читать документацию по регулярным выражениям скучно, а не тот день, который застревает в вашей памяти (я вам завидую, если вы помните всю информацию). - плотная страница документов, которые вы читаете.) Успешный день, играющий в глупую игру слов, действительно застрял в моей памяти, и оба научат вас чему-то, поэтому я говорю вам, вперед! Делайте глупые и бесполезные проекты во имя знаний!

(или нет, как угодно. просто делай свое дело)