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

Домашнее задание

  1. {i} Прочитать про регулярные выражения на Википедии и в документации

  2. Упражнения. В упражнениях мы будем использовать конструкцию re.search(шаблон, строка).group(), которая возвращает часть строки, соответствующую всему шаблону и re.search(шаблон, строка).groups(), которая возвращает части строки, соответствующие группам, если они есть в шаблоне. Про т. н. «match object», который возвращает функция re.search(), см. в документации.

    1. Простые РВ.
      • Найти подстроку вида "«любой символ»A": ".A"

        >>> re.search(r'.A','qwAbnA').group()
        'wA'
      • Найти подстроку вида "«цифра»/«цифра»": …

      • Найти подстроку вида "«маленькая латинская буква»«любой символ»" в конце строки: …

    2. С повторителями
      • Найти подстроку вида "(«пять каких-то символов»)": "\(.{5}\)" (использование "\(" превращает "(" из спецсимвола в обычную скобочку)

        >>> re.search(r'\(.{5}\)','((((()))))').group()
        '((((())'
      • Найти подстроку вида "(«какие-то не-скобки»)": …

      • Найти подстроку вида "/«не менее одной буквы»/": …

      • Найти подстроку вида "«две-три буквы»«две-три цифры»": …

      • Какому шаблону соответствуют подстроки "ABC", "A-B-C", "AB+C", но не "A+=B-C", "ArCaB" и "AzBooC"?

    3. Альтернативы и повторители на них
      • Подстрока, состоящая из "K" и идущих парами "L": "(K|LL)+"

        >>> re.search(r'(K|LL)+','qweKLLKKLLLLKLasd').group()
        'KLLKKLLLLK'
      • Натуральное число: "\d+"

      • Целое число: …
      • Фраза "slow motion", в которой перед "motion" может стоять определённый или неопределённый артикль
      • Целое число с учётом того, что "0" не бывает отрицательным
    4. Поиск с заменой
      • Поменять местами первое и второе слово в строке:
        >>> re.sub(r"([^\s]+)(\s+)([^\s]+)",r"\3\2\1","one tho three")
        'tho one three'
        >>> re.sub(r"(\S+)(\s+)(\S+)",r"\3\2\1","one tho three")
        'tho one three'
      • заменить цифры точками: …
      • заменить парные кавычки строками "<<" и ">>": …

      • … + исключить из рассмотрения экранированные кавычки ('\"')

    5. Написать программу, заменяющую в тексте двухбуквенные имена дней недели («Пн Вт Ср Чт Пт Сб Вс») на номера.
  3. Написать РВ, распознающее числа в формате с плавающей точкой (например, такие, в которые python преобразует -0.000000000123412 и 12300000000000000.):

      -1.23412e-10 и 1.23e+16

Пока хватит, большие задачки будем делать в следующий раз :) Но если всё же интересно, см LecturesVMSH/2011-03-16

Условные обозначения


CategoryClass CategoryVmsh

LecturesVMSH/Python/2013-05-17 (последним исправлял пользователь FrBrGeorge 2013-05-19 11:07:30)