Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 4656 / 500 | Длительность: 21:48:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 11:

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

< Самостоятельная работа 1 || Самостоятельная работа 11: 12345

23.6. Бонусный раздел для пользователей UNIX

Поиск в содержимом файлов с помощью регулярных выражений был встроен в операционную систему UNIX, начиная с 1960-х годов, и в настоящее время доступен практически во всех языках программированиях в той или иной форме.

Как правило, в системе UNIX имеется программа с консольным интерфейсом под названием grep (Generalized Regular Expression Parser), которая работает примерно так же, как описанный в этой главе метод search(). Таким образом, если вы работаете в системах Macintosh или Linux, вы можете попробовать следующую команду в консольном окне:

$ grep '^From:' mbox-short.txt
From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
  

Команда указывает утилите grep напечатать все строки в файле mbox-short.txt, начинающиеся с фрагмента "From:".

Если вы немного поэкспериментируете с утилитой grep и прочитаете документацию к ней, то найдете небольшие различия между регулярными выражениями Питона и регулярными выражениями, используемыми в grep. Например, grep не поддерживает непробельный символ "\S", так что придется использовать чуть более сложное обозначение "[^ ]", означающее попросту любой символ, отличный от пробела.

23.7. Отладка

Питон содержит простую встроенную документацию, которая пригодится, когда потребуется освежить знания и вспомнить правильное название того или иного метода. Документация доступна в интерпретаторе Питона в интерактивном режиме.

Воспользоваться интерактивной документацией можно с помощью команды help().

>>> help()
Welcome to Python 2.6! This is the online help utility.
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics". Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".
help> modules
  

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

>>> import re
>>> dir(re)
[.. 'compile', 'copy_reg', 'error', 'escape', 'findall',
'finditer', 'match', 'purge', 'search', 'split', 'sre_compile',
'sre_parse', 'sub', 'subn', 'sys', 'template']
  

Можно запросить короткую информацию по каждому конкретному методу:

>>> help (re.search)
Help on function search in module re:
search(pattern, string, flags=0)
Scan through string looking for a match to the pattern, returning
a match object, or None if no match was found.
>>>
  

Встроенная документация не слишком обширная, но может оказаться полезной, когда время ограничено или отсутствует доступ к веб-браузеру либо поисковой системе.

23.8. Глоссарий

Хрупкий код (brittle code): код, который работает, когда входные данные строго соответствуют заданному формату, но склонен к отказам, когда данные отклоняются от правильного формата. Мы называем такой код "хрупким", поскольку подобные программы легко ломаются.

Жадное сопоставление (greedy matching): сопоставление, при котором подстрока, задаваемая в регулярном выражении с помощью символов "+" и "*", расширяется до максимально возможного предела.

grep: команда, доступная в большинстве UNIX-систем, которая осуществляет поиск в содержимом текстовых файлов, выдавая строки, соответствующие регулярному выражению. Название команды является сокращением от "Generalized Regular Expression Parser".

Регулярное выражение: язык для задания сложных шаблонов поиска. Регулярные выражения могут содержать специальные символы, указывающие, что совпадение ищется в начале или в конце строки, и многие другие подобные возможности.

Символ подстановки (wild card): специальный символ, который при сопоставлении соответствует любому символу. В регулярных выражениях в качестве символа подстановки используется точка.

23.9. Упражнения

Упражнение 23.1.

Напишите простую программу, моделирующую работу команды grep операционной системы Unix. Программа просит пользователя ввести регулярное выражение и затем подсчитывает количество строк, соответствующих этому выражению:

$ python grep.py
Enter a regular expression: ^Author
mbox.txt had 1798 lines that matched ^Author
$ python grep.py
Enter a regular expression: ^X-
mbox.txt had 14368 lines that matched ^X-
$ python grep.py
Enter a regular expression: java$
mbox.txt had 4218 lines that matched java$
  

Упражнение 11.2.

Напишите программу, которая отыскивает в заданном файле все строки вида New Revision: 39772. Из каждой такой строки извлекается число с помощью регулярного выражения и метода findall(). Программа должна вычислить и напечатать среднее арифметическое всех этих чисел.

Enter file: mbox.txt
38549.7949721
Enter file: mbox-short.txt
39756.9259259
  
< Самостоятельная работа 1 || Самостоятельная работа 11: 12345
Ксения Шошина
Ксения Шошина

курс Программирование на Python

Илья Кизилов
Илья Кизилов

В лекции приводится программа для сортировки слов по их длинне. В коде ошибка. Я исправил так:

def sort_by_length(words):

words = words.split()

t = []

for word in words:

t.append((len(word), word))

t.sort(reverse=True)

res = []

for length, word in t:

res.append(word)

return res

print(sort_by_length(words))

 

Кто ещё как сделал?

 

Владислав Клокол
Владислав Клокол
Украина, Харьков, ХВВКУ РВ, 1993
Александр Мантей
Александр Мантей
Россия, г. Новомосковск