<div class="gmail_quote">On Sat, Jun 4, 2011 at 00:24, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">At Sat, 4 Jun 2011 00:09:40 -0300, Rodolfo Carvalho wrote:<br>
&gt; Eli says that<br>
&gt;<br>
&gt; (BTW, Racket&#39;s solution is something that is done in many other<br>
&gt; &gt; languages too.)<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I come from Python where I can write<br>
&gt;<br>
&gt; &gt;&gt;&gt; re.findall(&quot;\d{2}&quot;, &quot;06/03/2011&quot;)<br>
&gt; [&#39;06&#39;, &#39;03&#39;, &#39;20&#39;, &#39;11&#39;]<br>
&gt;<br>
&gt; And printing the string that I used for my regexp gives:<br>
&gt;<br>
&gt; &gt;&gt;&gt; print &quot;\d{2}&quot;<br>
&gt; \d{2}<br>
<br>
</div>Isn&#39;t that only because &quot;\d&quot; isn&#39;t an escape in strings? While Racket<br>
complains about a &quot;\&quot; that doesn&#39;t form an escape sequence, Python<br>
treats the &quot;\&quot; as a literal (while Ruby effectively ignores the &quot;\&quot;).<br>
<br>
Compare to the Python example<br>
<br>
 &gt;&gt;&gt; re.findall(&quot;a\b&quot;, &quot;a &quot;)<br>
 []<br>
 &gt;&gt;&gt; re.findall(&quot;a\\b&quot;, &quot;a &quot;)<br>
 [&#39;a&#39;]<br>
<br>
Since &quot;\b&quot; is an escape that means ASCII 8, to get a backslash followed<br>
by a &quot;b&quot; in a regexp (to indicate a word boundary), you need to use<br>
&quot;\\b&quot;.<br>
<br></blockquote><div><br></div><div><br></div><div>Yeah... thinking like this makes Python feel a bit more complex to reason about.</div><div>&quot;\d&quot; doesn&#39;t mean anything in the &quot;string-world&quot; while &quot;\b&quot; does, and therefore needs to have the backslash escaped.</div>

<div><br></div><div><br></div><div>Wait wait!</div><div>However, Python strings have a special raw-mode (raw-strings), suitable for writing regexps...</div><div><br></div><div><br></div><div>So I&#39;ve been &quot;lying&quot; all the time. I was not used to write &quot;\d{2}&quot;, but actually the raw-string r&quot;\d{2}&quot;.</div>

<div>Using a raw-string makes Matthew&#39;s examples work as follows:</div><div><br></div><div><br></div><div><div>&gt;&gt;&gt; re.findall(r&quot;a\b&quot;, &quot;a &quot;)</div><div>[&#39;a&#39;]</div><div><br></div><div>

&gt;&gt;&gt; re.findall(r&quot;a\\b&quot;, &quot;a &quot;)</div><div>[]</div></div><div><br></div><div> </div></div><br>