Задача Лаборатории машинного обучения Университета Триеста (Италия) предлагает решать Всего 12 заданий, причем уровень заданий сильно варьируется — от суперпростых до сложных.
Конечно, решений может быть несколько, и тестовые примеры задачи не охватывают все варианты.
Тем не менее, если вы набрали 100%, то поздравляю! Тест пройден.
Спойлер: в некоторых задачах (особенно простых) подсказка является практически решением.
Задание 1 – найди числа
Есть текст, содержащий цифры, вам нужно найти все цифры.Сложность: очень легко.
Зацепка Вы должны использовать цифровой символ и квантификатор множественности.
Решение
\д+«[0-9]+» также является правильным решением.
Анализ решения
- «\d» или «[0-9]» — это любой одиночный символ от 0 до 9.
- «+» — допускается использование одного или нескольких символов.
Задача 2 — найти mac-адреса
Есть текст, содержащий мак-адреса, их нужно найти.Сложность: легко.
Зацепка Вы должны использовать символ, обозначающий любую букву или цифру, двоеточие для разделения и квантификатор множественности.
Решение
\w{2}:\w{2}:\w{2}:\w{2}:\w{2}:\w{2}«+» вместо «{2}» — тоже правильное решение, хотя и не совсем точное.
Анализ решения
- «\w» — любой буквенный символ или любое число.
- «{2}» — допускается использование только 2 символов.
А в предыдущем решении использовался знак \w, обозначающий любой символ алфавита и все цифры.
Согласен, наверное, в этом нет необходимости, но мы можем это учесть и заодно сократить штатный график.
([\da-f]{2}:){5}[\da-f]{2}Анализ решения
- «\d» — любая одна цифра, «a-f» — диапазон от a до f. Итого имеем допустимый набор символов 0123456789abcdef — то есть шестнадцатеричный код Hex. «{2}» — любые 2 символа из этого набора символов.
- "([\da-f]{2}:)"{5} - допускается повторение двух символов шестнадцатеричный + двоеточие ровно 5 раз.
- и в конце "[\da-f]{2}" — любые 2 символа из шестнадцатеричного набора
Задача 3 — найти ftp-адреса
Там текст с фтп адресами, надо их найти.Сложность: легко.
Зацепка Вам нужно начать с ftp://, а затем перечислить разрешенные символы в адресе, не забывая о кванторе множественности.
Решение
ftp:\/\/[\w\d-_.\/]+Анализ решения
- «\/» — это обычный escape-символ «/».
- внутри квадратных скобок находится список допустимых символов, а именно: любой буквенный символ или любая цифра, дефис, подчеркивание, точка или косая черта (если в имени есть другие символы, их можно добавить).
Задача 4 – найти закономерность
Есть некий форматированный файл, в котором нужно найти все строки, соответствующие шаблону $любые символы$.Сложность: легко.
Зацепка Вам необходимо использовать экранирование зарезервированных символов, экранирование любых символов, квантификаторы множественности и ленивый режим.
Решение Задача тривиальная, но требует немного лучшего знания регулярных последовательностей.
\\$.Анализ решения+?\\$
- «\\$» — бегство доллара.
- ".
+" - любое количество любых символов, "?" - убрать жадность.
Задача 5 — найти IP-адреса
Найдите IP-адреса из текста.Сложность: легко.
Зацепка Очень похоже на вторую проблему.
Решение
\d+\.Если вместо «+» вы написали «{1,3}» то вы молодец.\d+\.
\d+\.
\d+
Анализ решения
- "\d" — любая отдельная цифра,
- «+» — любое количество символов, «{1,3}» — строгое ограничение количества символов (от 1 до 3).
\b((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.Анализ решения Чтобы определить диапазон от 0 до 255 придется немного постараться:){3}(\d|[1 -9]\d|1\d{2}|2[0-4]\d|25[0-5])\b
- «\d» — число от 0 до 9
- "[1-9]\d" — число от 10 до 99
- "1\d{2}" — число от 100 до 199.
- "2[0-4]\d" — число от 200 до 249.
- «25[0-5]» — число от 250 до 255
- "(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]).
){3}" - внутри стоит точка, потому что оно также повторяется 3 раза и заканчивается тем же диапазоном цифр, но без точки.
- Добавляем в конец и начало слова ограничительный символ «\b» — это нужно, чтобы убрать из записи, например, текст «1172.30.42.109» (согласен, это маловероятно и, вероятно, ненужно).
Задача 6 – якорь
Извлеките тег href из html-документа.Сложность: средняя.
Зацепка Для каждой скобки следует использовать «любой символ, кроме» и «или».
Решение
href=("[^"]+"|'[^']+')Анализ решения
- " — начинаем поиск с двойной кавычки.
- «[^»]+» — тогда абсолютно любой символ, кроме двойной кавычки.
- Заканчиваем двойными кавычками.
Задача 7 – ссылки
Найдите все ссылки в свободном тексте.Задача усложняется тем, что недостаточно просто найти ссылку; вам нужно удалить недопустимые символы с конца.
Сложность: сложно.
Зацепка Вам нужно начать с http, использовать «любой символ, кроме» и завершить поиск допустимым символом.
Решение
http:\/\/([^> \s]+)[\w\/]В задаче нет https-ссылок, но вы можете это учесть, добавив "s?" после http. Анализ решения
- «[^> \s]+» ищет любые символы, кроме символа «> » и пробела.
На самом деле прочитать это можно так: «пойдем, пока не увидим один из этих символов».
- «[\w\/]» — разделитель, позволяющий завершить ссылку только латинским символом или косой чертой.
- лишняя "с?" в "https?" просто разрешите как «http://», так и «https://».
Задача 8 – Заголовки
В HTML любой тег h+номер считается заголовком.Сложность: средняя.
Зацепка Начните с h + цифра + любой символ или его отсутствие.
Решение Довольно просто:
.Анализ решения*<\/h\d.*>
- "h\d" - здесь мы говорим, что после символа должно быть число "\d".
- И тогда «.
*» может содержать любое количество любых символов, иначе ничего не может идти.
Поэтому такое решение будет более точным:
]*> .Правда, здесь есть баг, позволяющий открыть тег одним номером, а закрыть другим.+?<\/h[1-6]>
И поэтому еще более точным решением было бы использование ссылок: " ]*> .
+?<\/h\1> «.
Это не говоря уже о том, что тест не чувствителен к регистру.
Анализ решения
- «h[1-6]» — здесь мы говорим, что после «h» должно быть число от 1 до 6.
- «[^> ]*» — дальше могут идти абсолютно любые символы, кроме «> », а могут и нет.
- Заключив выражение «(h[1-6])» в круглые скобки, мы создаем группу с номером 1.
- Далее по ссылке на первую группу «\1» говорим, что хотим видеть в конце тот же h с тем же номером, что и в начале.
Задача 9 — Телефоны
В произвольном тексте найдите все телефоны в разных форматах.Сложность: сложно.
Зацепка Необходимо использовать знак наличия или отсутствия символа, квантор ограничения количества цифр и построение набора символов.
Возможен дизайн или.
Решение
\(?\d{3}[\).Это будет работать, но допускает два символа после первых трех цифр — хорошо, если это закрывающая скобка и пробел после нее, и плохо, если это два дефиса.\/-]{1,2}\d{3}[-.
]\d{4}
Поэтому существует немного более точное решение: "\(?\d{3}(\) ?|[.
\/-])\d{3}[-.
]\d{4}" Анализ решения
- "\(?" - указываем возможность наличия символа "(" или его отсутствие, экранируем его, поскольку это зарезервированный символ.
- «\d{3}» — числа с ограничением только 3.
- Другими возможными символами являются «[\].
\/-]{1,2}» — косая черта, закрывающая скобка, точка, пробел, обратная косая черта и дефис.
{1,2} — указывает, что таких символов может быть 1 или 2. Например, закрывающая скобка и пробел после нее.
- Далее обязателен «[-.
]» — дефис или точка.
- А «\d{4}» — это четыре цифры в конце.
Задача 10 - авторы
Существует некий шаблон, содержащий элементы, найдите всех авторов из поля автора.Сложность: очень сложно.
Зацепка Необходимо исходить из того, что все имена авторов начинаются с заглавной буквы и пишутся по образцу.
Решение
[A-Z][A-Za-z-']+, [A-Z](\{\\"\w\})?[A-za-z-']*( [A-Z][A-Za-z- ']*)?Это решение правильное, но имеет минус.
Мы обошли "{\"u}" с помощью костыля "({\"\w})?" и в принципе это работает, если вставить этот костыль и в другие части фамилий авторов.
В любом случае, если вы смогли как-то решить эту проблему – это очень здорово! Анализ решения
- «[A-Z][A-Za-z-']+» — Ищем слово, которое должно начинаться с заглавной буквы, затем содержать любой буквенный символ, дефис или апостроф.
- Дальше все точно так же, как чуть выше, но здесь между нами стоит «({\»\w})Э» - это всего лишь костыль, позволяющий обойти проверку.
Это означает, что кусок «{\»u}» может как присутствовать, так и отсутствовать.
- И тут снова точно так же, как и в первом случае "([A-Z][A-Za-z-']*)?", только это выражение заключено в группу и есть знак "?" означает, что это условие не является обязательным.
Лучшее решение Есть более компактное и простое решение, позволяющее отказаться от костыля выше:
[A-Z]\S+, [A-Z]\S*( [A-Z][\S]*)?\bАнализ решения
- "[A-Z]\S+, " - сначала обязательно заглавная буква "[A-Z]", затем любое количество непробельных символов "\S+" до точки с запятой ", ".
- Далее почти то же самое «[A-Z]\S*» — оно должно начинаться с заглавной буквы, а затем любой непробельный символ до границы слова «\b».
- "([A-Z][\S]*)?" - и между ними есть одна и та же, но не обязательная, группа для отчества.
Проблема 11 — Содержимое заголовка
Точно так же, как и в задании 8, только вам нужно найти не сами заголовки, а их содержание.Сложность: сложно.
Зацепка Задача идентична задаче 8. Это несложно, если вы умеете смотреть назад и вперед. Имеет решение с оглядкой и без оглядки.
Решение Не оглядываясь назад:
([\w ]*<[^h].Анализ решения+|[^<> ]+)(?=<\/h\d> )
- "([\w ]*<[^h].
+|[^<> ]+)» — есть два варианта начала содержимого заголовка.
Первый — с тега внутри «[\w ]*<[^h].
+" - in this case, you need to make sure that this is not an h tag and take into account the fact that there may be text before the tag. The second option is text without tags "[^<> ]+», то есть любые символы, кроме открывающего и закрывающего тега.
- "(?=<\/h\d> )» — это просмотр вперед, который должен содержать закрывающий тег h.
(?<= ]+> ).Плюс ко всему вы можете учесть все замечания по решению задачи 8. Анализ решения+?(?=<\/h\d> )
- "(?<= ]+> )» — это взгляд назад, внутри которого должен быть тег h.
- "(?=<\/h\d> )» — это просмотр вперед, который должен содержать закрывающий тег h.
Задача 12 – список авторов
Задача аналогична задаче 10, но на мой взгляд проще.Сложность: сложно.
Зацепка Все основные принципы из задачи 10, но нужно учитывать начало строки.
Решение, которое я знаю, использует ретроспективный анализ.
Решение
(?<=^\d+\.Анализ решения)[A-Z][\w]+, [A-Z][\w\.
]+
- "(?<=^\d+.
)" - looking back where there must be any number of digits from a new line to a point with a space.
- «[A-Z][\w]+,» — затем любое слово от заглавной буквы до точки с запятой и снова то же самое «[A-Z][\w.]+».
(?<=^\d+\.Анализ решения)[^,]+,[^,:]+
- "(?<=^\d+.
)" - looking back where there must be any number of digits from a new line to a point with a space.
- «[^,]+,» — любое количество любых символов до запятой + запятая.
- "[^,:]+" - любое количество любых символов до запятой или двоеточия.
-
Выделенные Серверы: Что Это Такое?
19 Oct, 24 -
Яндекс.картинки: Время Перемен
19 Oct, 24 -
20 Патчей «Вторник»
19 Oct, 24 -
Слово В Защиту Биткойна
19 Oct, 24 -
Выпуск Оперы 17
19 Oct, 24