Before you keep reading...
Runestone Academy can only continue if we get support from individuals like you. As a student you are well aware of the high cost of textbooks. Our mission is to provide great books to you for free, but we ask that you consider a $10 donation, more if you can or less if $10 is a burden.
Before you keep reading...
Making great stuff takes time and $$. If you appreciate the book you are reading now and want to keep quality materials free for other students please consider a donation to Runestone Academy. We ask that you consider a $10 donation, but if you can give more thats great, if $10 is too much for your budget we would be happy with whatever you can afford as a show of support.
12.1. Regular Expressions¶
So far we have been reading through files, looking for patterns and
extracting various bits of lines that we find interesting. We have been using string methods like
find and using lists and string slicing to extract portions of the lines.
This task of searching and extracting is so common that Python has a very powerful library called regular expressions that handles many of these tasks quite elegantly. The reason we have not introduced regular expressions earlier in the book is because while they are very powerful, they are a little complicated and their syntax takes some getting used to.
Regular expressions are almost their own little programming language for searching and parsing strings. As a matter of fact, entire books have been written on the topic of regular expressions. In this chapter, we will only cover the basics of regular expressions. For more detail on regular expressions, see:
The regular expression library
re must be imported into
your program before you can use it. The simplest use of the regular
expression library is the
search() function. The following
program demonstrates a trivial use of the search function.
This code uses regular expressions to print lines that contain “From:”.
We open the file, loop through each line, and use the regular expression
search() to only print out lines that contain the string
“From:”. This program does not use the real power of regular
expressions, since we could have just as easily used
line.find() to accomplish the same result.
The power of the regular expressions comes when we add special characters to the search string that allow us to more precisely control which lines match the string. Adding these special characters to our regular expression allow us to do sophisticated matching and extraction while writing very little code.
For example, the caret character is used in regular expressions to match “the beginning” of a line. We could change our program to only match lines where “From:” was at the beginning of the line as follows:
Using regular expressions to print lines that contain “From:” at the beginning of the line.
Now we will only match lines that start with the string
“From:”. This is still a very simple example that we could have done
equivalently with the
startswith() method from the string
library. But it serves to introduce the notion that regular expressions
contain special action characters that give us more control as to what
will match the regular expression.
Construct a block of code that loops reading lines from a file, removes whitespace on the right of the line, and prints out any line starting with ‘Wolverines’.