I recently came across a site that made coming up with regular expressions much, much easier for me: <span style="font-family:&#39;.HelveticaNeueUI&#39;;white-space:nowrap"><a href="http://www.debuggex.com/">http://www.debuggex.com/</a></span><div>
<font face=".HelveticaNeueUI"><span style="white-space:nowrap"><br></span></font></div><div><font face=".HelveticaNeueUI"><span style="white-space:nowrap">Hopefully that will help with your &quot;regex hell&quot; problem.<span></span><br>
</span></font><br>On Thursday, July 18, 2013, Greg Hendershott  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">To add to what Carl and Robby said:<br>
<br>
On Thu, Jul 18, 2013 at 2:29 AM,  &lt;<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;m0nastic@tengulabs.com&#39;)">m0nastic@tengulabs.com</a>&gt; wrote:<br>
&gt; (although truth be told, mail headers are surprisingly nonstandard even<br>
&gt; within a single message)<br>
<br>
That&#39;s where net/head could definitely help. (Especially for SMTP<br>
headers, which tend to be more &quot;interesting&quot; than typical HTTP<br>
headers.)<br>
<br>
&gt; I eventually discovered that I could sort of cheat, by just wrapping the<br>
&gt; regexp-match function with a car (which worked, because this particular<br>
&gt; list only had one element), and then it was usable from then on (and<br>
&gt; validated true from &quot;string?&quot;).<br>
<br>
It&#39;s worth walking through what Carl described. Actually you&#39;re lucky,<br>
you have a specific example of something you want to do, which touches<br>
on a few basic aspects of Racket.<br>
<br>
Having said that, one pattern I&#39;ve settled into using with regexps is<br>
to use `match`, which makes it convenient to &quot;de-structure&quot; the list.<br>
For example:<br>
<br>
(match &quot;From: Me&quot;<br>
  [(pregexp &quot;^(.+):\\s*(.+)$&quot; (list all key val))<br>
   (displayln all)   ; From: Me<br>
   (displayln key)   ; From<br>
   (displayln val)]) ; Me<br>
<br>
If you don&#39;t need the &quot;all&quot; part, you can supply _ like so:<br>
<br>
(match &quot;From: Me&quot;<br>
  [(pregexp &quot;^(.+):\\s*(.+)$&quot; (list _ key val))<br>
   (displayln key)<br>
   (displayln val)])<br>
<br>
Which is the pattern I use a lot.<br>
<br>
Again, you probably want to use net/head to deal with the gory details<br>
of SMTP headers as Robby suggested, and it would definitely be good to<br>
walk through the explorations Carl described.<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</blockquote></div>