Регулярные выражения

Немного истории

Копия плана (примеры и пояснения см. на сайте):

Особенности Python

Поиск с заменой

В методичке нет про поиск с заменой sub()

Ещё почитать

Д/З

  1. Прочитать и прощёлкать
  2. EJudge: RegexDump 'Структура РВ'

    Написать программу, которой на вход подаётся синтаксически верное регулярное выражение, а затем — строки поиска (последняя строка пустая). Программа должна выводить информацию о первой найденной в строке поиска подстроке, соответствующей регулярному выражению, в таком формате:

    • Если подстрока не найдена, выводится «<NONE>»

    • Если подстрока найдена, выводится позиция: подстрока, где «позиция» — это номер символа в строке, начиная с которого была найдена подстрока

    • Если в регулярном выражении присутствовала группировка с сохранением (попросту скобочки), выводится номер группы/позиция: подстрока для каждой группы

    • Если в регулярном выражении присутствовали именованные группы, выводится имя группы/позиция: подстрока для каждой группы (в порядке их появления в re.Match.groupdict())

    • Если какая-то группа присутствует в исходном выражении, но не нашла сопоставления (например, была помечена повторителем * и пропущена), она не выводится

    Input:

    (\w)+(@+)?(?P<nonalpha>\W+)--(\w+)
    ^_^awww-----foo;_;
    #$qwer@@@--wqer#$
    Output:

    3: awww-----foo
    1/6: w
    3/7: ---
    4/12: foo
    nonalpha/7: ---
    2: qwer@@@--wqer
    1/5: r
    2/6: @@
    3/8: @
    4/11: wqer
    nonalpha/8: @
  3. EJudge: PigLatin 'Поросячья латынь'

    Согласно правилам «поросячьей латыни» английские слова при разговоре преобразуются так:

    • Если слово начинается на согласную — эта согласная переносится в конец слова, после чего добавляется «ay»: "latin" ⇒ "atinlay"

    • Если слово начинается на несколько согласных, они все переносятся в конец слова, после чего добавляется «ay»: "stupid" ⇒ "upidstay"

    • Если слово начинается на гласную, "aouie" (не "y"!), cодержит согласные и имеет более одного слога, лидирующие гласные и все согласные за ними переносятся в конец с добавлением «ay»: "under" ⇒ "erunday" (в Википедии это второй вариант)

      • для нашего удобства непроизносимые гласные тоже считаются слогом, например "are" ⇒ "earay"; (так исторически не было: язык всё-таки разговорный)

    • Односложные слова, начинающиеся на гласную, а также слова, состоящие из одних только гласных, просто дополняются «yay»: "egg" ⇒ "eggyay"

    • Последовательности, состоящие только из согласных, не изменяются (например, такой последовательностью является «my»)

    • Апостроф считается согласной буквой (маленькой), а дефис — разделителем (опять-таки для простоты)

    Написать программу, которая построчно вводит «английский» текст (текст, содержащий последовательности латинских букв и другие символы; последняя строка пустая) и выводит перевод на поросячью латынь (для простоты любая последовательность английских букв с гласными считается словом). Обратите внимание на то, что слово, написанное со заглавной буквы, в поросячьей латыни также пишется со заглавной буквы. Более одной заглавной буквы в слове не встречается.

    Input:

    This is an example of Hog Latin. As you can see, it's silly,
    but lots of fun for children.
    Output:

    Isthay isyay anyay ampleexay ofyay Oghay Atinlay. Asyay ouyay ancay eesay, it'syay illysay,
    utbay otslay ofyay unfay orfay ildrenchay.
  4. EJudge: ChicagoTurabian 'Чикаго Турабьян'

    Написать программу, которой на вход подаётся две строки — внутритекстовая ссылка N на некоторую книгу и библиографическая ссылка B на эту же книгу. программа должна проверить, что обе ссылки синтаксически верны и ссылаются на одну и ту же книгу. Формат ссылок — упрощённый стиль Турабьян. Вывод программы — True, если B соответствует N, и False — если не соответствует, или такое соответствие невозможно определить из-за синтаксической некорректности

    • Полное описание стиля для задачи с примерами

      • Обратите внимание на то, как в B слились точка после инициала автора и точка после списка авторов.

    • Будем считать, что страница может быть указана или одна, или диапазоном
      • Во всех примерах со страницами «» — это не «» и не «-». Серьёзно! А в интернете бывает все три.

    • Будем считать, что у первого автора всегда есть и имя, и фамилия
    • Никаких вложенных скобок!
    • Обратите внимание на т. н. «оксфордскую запятую» перед словом «and» в перечне авторов: она не соблюдается только для двух авторов в N, а в остальных случаях — для трёх и более авторов в N и для двух и более авторов в B — соблюдается)

    Input:

    42. Roger Frey, Utility and Rights (Minneapolis: University of Minnesota Press, 1984), 95.
    Frey, Roger. Utility and Rights. Minneapolis: University of Minnesota Press, 1984.
    Output:

    True
    • <!> Это довольно кропотливая задача из реальной жизни с «некрасивым» решением

LecturesCMC/PythonIntro2023/26_RegularExpressions (последним исправлял пользователь FrBrGeorge 2023-10-23 13:12:55)