<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<link rel=
"STYLESHEET" href=
"lib.css" type='text/css'
/>
<link rel=
"SHORTCUT ICON" href=
"../icons/pyfav.png" type=
"image/png" />
<link rel='start' href='../index.html' title='Python Documentation Index'
/>
<link rel=
"first" href=
"lib.html" title='Python Library Reference'
/>
<link rel='contents' href='contents.html'
title=
"Contents" />
<link rel='index' href='genindex.html' title='Index'
/>
<link rel='last' href='about.html' title='About this document...'
/>
<link rel='help' href='about.html' title='About this document...'
/>
<link rel=
"prev" href=
"match-objects.html" />
<link rel=
"parent" href=
"module-re.html" />
<link rel=
"next" href=
"module-struct.html" />
<meta name='aesop' content='information'
/>
<title>4.2.6 Examples
</title>
<div id='top-navigation-panel' xml:id='top-navigation-panel'
>
<table align=
"center" width=
"100%" cellpadding=
"0" cellspacing=
"2">
<td class='online-navigation'
><a rel=
"prev" title=
"4.2.5 Match Objects"
href=
"match-objects.html"><img src='../icons/previous.png'
border='
0' height='
32' alt='Previous Page' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"parent" title=
"4.2 re "
href=
"module-re.html"><img src='../icons/up.png'
border='
0' height='
32' alt='Up One Level' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"next" title=
"4.3 struct "
href=
"module-struct.html"><img src='../icons/next.png'
border='
0' height='
32' alt='Next Page' width='
32'
/></A></td>
<td align=
"center" width=
"100%">Python Library Reference
</td>
<td class='online-navigation'
><a rel=
"contents" title=
"Table of Contents"
href=
"contents.html"><img src='../icons/contents.png'
border='
0' height='
32' alt='Contents' width='
32'
/></A></td>
<td class='online-navigation'
><a href=
"modindex.html" title=
"Module Index"><img src='../icons/modules.png'
border='
0' height='
32' alt='Module Index' width='
32'
/></a></td>
<td class='online-navigation'
><a rel=
"index" title=
"Index"
href=
"genindex.html"><img src='../icons/index.png'
border='
0' height='
32' alt='Index' width='
32'
/></A></td>
<div class='online-navigation'
>
<b class=
"navlabel">Previous:
</b>
<a class=
"sectref" rel=
"prev" href=
"match-objects.html">4.2.5 Match Objects
</A>
<b class=
"navlabel">Up:
</b>
<a class=
"sectref" rel=
"parent" href=
"module-re.html">4.2 re
</A>
<b class=
"navlabel">Next:
</b>
<a class=
"sectref" rel=
"next" href=
"module-struct.html">4.3 struct
</A>
<!--End of Navigation Panel-->
<H2><A NAME=
"SECTION006260000000000000000">
<DIV CLASS=
"leftline" ID=
"par86950" ALIGN=
"LEFT">
<strong>Simulating
<tt class=
"cfunction">scanf()
</tt></strong></DIV>
Python does not currently have an equivalent to
<tt class=
"cfunction">scanf()
</tt>.
<a id='l2h-
914' xml:id='l2h-
914'
></a>
Regular expressions are generally more powerful, though also more
verbose, than
<tt class=
"cfunction">scanf()
</tt> format strings. The table below
offers some more-or-less equivalent mappings between
<tt class=
"cfunction">scanf()
</tt> format tokens and regular expressions.
<div class=
"center"><table class=
"realtable">
<th class=
"left" ><tt class=
"cfunction">scanf()
</tt> Token
</th>
<th class=
"left" >Regular Expression
</th>
<tr><td class=
"left" valign=
"baseline"><code>%c
</code></td>
<td class=
"left" ><tt class=
"regexp">.
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%
5c
</code></td>
<td class=
"left" ><tt class=
"regexp">.{
5}
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%d
</code></td>
<td class=
"left" ><tt class=
"regexp">[-+]?
\d+
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%e
</code>,
<code>%E
</code>,
<code>%f
</code>,
<code>%g
</code></td>
<td class=
"left" ><tt class=
"regexp">[-+]?(
\d+(
\.
\d*)?|
\d*
\.
\d+)([eE][-+]?
\d+)?
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%i
</code></td>
<td class=
"left" ><tt class=
"regexp">[-+]?(
0[xX][
\dA-Fa-f]+|
0[
0-
7]*|
\d+)
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%o
</code></td>
<td class=
"left" ><tt class=
"regexp">0[
0-
7]*
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%s
</code></td>
<td class=
"left" ><tt class=
"regexp">\S+
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%u
</code></td>
<td class=
"left" ><tt class=
"regexp">\d+
</tt></td></tr>
<tr><td class=
"left" valign=
"baseline"><code>%x
</code>,
<code>%X
</code></td>
<td class=
"left" ><tt class=
"regexp">0[xX][
\dA-Fa-f]+
</tt></td></tr></tbody>
To extract the filename and numbers from a string like
<div class=
"verbatim"><pre>
/usr/sbin/sendmail -
0 errors,
4 warnings
you would use a
<tt class=
"cfunction">scanf()
</tt> format like
<div class=
"verbatim"><pre>
%s - %d errors, %d warnings
The equivalent regular expression would be
<div class=
"verbatim"><pre>
(\S+) - (\d+) errors, (\d+) warnings
<DIV CLASS=
"leftline" ID=
"par86951" ALIGN=
"LEFT">
<strong>Avoiding recursion
</strong></DIV>
If you create regular expressions that require the engine to perform a
lot of recursion, you may encounter a RuntimeError exception with
the message
<code>maximum recursion limit
</code> exceeded. For example,
<div class=
"verbatim"><pre>
>>> s = 'Begin ' +
1000*'a very long string ' + 'end'
>>> re.match('Begin (\w| )*? end', s).end()
Traceback (most recent call last):
File
"<stdin>", line
1, in ?
File
"/usr/local/lib/python2.3/sre.py", line
132, in match
return _compile(pattern, flags).match(string)
RuntimeError: maximum recursion limit exceeded
You can often restructure your regular expression to avoid recursion.
Starting with Python
2.3, simple uses of the
<tt class=
"regexp">*?
</tt> pattern are
special-cased to avoid recursion. Thus, the above regular expression
can avoid recursion by being recast as
<tt class=
"regexp">Begin [a-zA-Z0-
9_ ]*?end
</tt>. As a further benefit, such regular
expressions will run faster than their recursive equivalents.
<div class='online-navigation'
>
<table align=
"center" width=
"100%" cellpadding=
"0" cellspacing=
"2">
<td class='online-navigation'
><a rel=
"prev" title=
"4.2.5 Match Objects"
href=
"match-objects.html"><img src='../icons/previous.png'
border='
0' height='
32' alt='Previous Page' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"parent" title=
"4.2 re "
href=
"module-re.html"><img src='../icons/up.png'
border='
0' height='
32' alt='Up One Level' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"next" title=
"4.3 struct "
href=
"module-struct.html"><img src='../icons/next.png'
border='
0' height='
32' alt='Next Page' width='
32'
/></A></td>
<td align=
"center" width=
"100%">Python Library Reference
</td>
<td class='online-navigation'
><a rel=
"contents" title=
"Table of Contents"
href=
"contents.html"><img src='../icons/contents.png'
border='
0' height='
32' alt='Contents' width='
32'
/></A></td>
<td class='online-navigation'
><a href=
"modindex.html" title=
"Module Index"><img src='../icons/modules.png'
border='
0' height='
32' alt='Module Index' width='
32'
/></a></td>
<td class='online-navigation'
><a rel=
"index" title=
"Index"
href=
"genindex.html"><img src='../icons/index.png'
border='
0' height='
32' alt='Index' width='
32'
/></A></td>
<div class='online-navigation'
>
<b class=
"navlabel">Previous:
</b>
<a class=
"sectref" rel=
"prev" href=
"match-objects.html">4.2.5 Match Objects
</A>
<b class=
"navlabel">Up:
</b>
<a class=
"sectref" rel=
"parent" href=
"module-re.html">4.2 re
</A>
<b class=
"navlabel">Next:
</b>
<a class=
"sectref" rel=
"next" href=
"module-struct.html">4.3 struct
</A>
<span class=
"release-info">Release
2.4.2, documentation updated on
28 September
2005.
</span>
<!--End of Navigation Panel-->
See
<i><a href=
"about.html">About this document...
</a></i> for information on suggesting changes.