Документ взят из кэша поисковой машины. Адрес оригинального документа : http://uneex.mithril.cs.msu.su/LecturesVMSH/Python/2013-05-17
Дата изменения: Unknown
Дата индексирования: Sun Apr 10 05:01:40 2016
Кодировка: UTF-8
LecturesVMSH/Python/2013-05-17 - UNИX

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

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

  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 08:07:30)