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


Это копипаста аналогичного материала прошлых лет; возможно, её надо отредактировать

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

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

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

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

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

Ещё почитать

Д/З

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

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

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

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

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

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

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

    Input:

    (\w)+(@+)?(?P<nonalpha>\W+)--(\w+)
    ^_^awww-----foo;_;
    L'amor che muove il sole e l'altre stelle
    #$qwer@@@--wqer#$
    Output:

    3: awww-----foo
    1/6: w
    3/7: ---
    4/12: foo
    nonalpha/7: ---
    <NONE>
    2: qwer@@@--wqer
    1/5: r
    2/6: @@
    3/8: @
    4/11: wqer
    nonalpha/8: @
  3. EJudge: CorrectNumber 'Проверка числа'

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

    • Число в обычной форме не должно содержать ведущих нулей. Знак "-" должен стоять только перед непололожительным числом и только в одном экземпляре. Число также может быть записано в двоичной, восьмеричной или шестнадцатеричной системе счисления. В различных системах счисления число будет иметь вид (угловые скобки означают термин):
      %0x<обычная форма>
      в шестнадцатеричной (состоит из цифр и маленьких латинских букв). Число знаков после "0x" не должно превышать 16.
      %0o<обычная форма>
      в восьмеричной. Число знаков после "0o" не должно превышать 8.
      %0b<обычная форма>
      в двоичной. Число знаков после "0b" не должно превышать 20.
    • Знак "-" также может быть только один и должен стоять перед символом "%". Примеры корректных чисел в обычной форме: 75, -%0x6f4, %0b101110 , %0o1705.

    • Число в экспоненциальной форме представляет собой запись следующего вида (необязательные элементы заключены в квадратные скобки):
          <число в обычной форме>[<.><неотрицательное число в обычной форме, может содержать ведущие нули, не влияющие на подсчет количества знаков и стоящие до символа "%" если число не в десятичной системе счисления>]<E>[<знак "+" или "-"><число в обычной форме>]
    Input:

    %0x5f7.00%0b1011E-%0o71
    Output:

    YES

LecturesCMC/PythonIntro2024/26_RegularExpressions (последним исправлял пользователь FrBrGeorge 2024-10-20 19:07:28)