title: can't get correct python regex with this string that contains unicode
body: <p>I have this string:</p>
  
  <pre><code>s = u'vitamin a min. 14,053 iu/kg   vitamin c 13,000iu/kg vitamin d max. 10,000\u03bc/kg copper 1mg/kg vitamin e mon 10.00iu/kg'
  </code></pre>
  
  <p>I want to break it apart so I get <code>[label, label2, amount, units]</code>.</p>
  
  <ul>
  <li><code>label</code> is the name ie, <code>vitamin c</code> and can contain unicode characters</li>
  <li><code>label2</code> is <code>min|max</code> depending on the particular string.</li>
  <li><code>amount</code> is the numerical amount listed (can include commas or decimals)</li>
  <li><code>units</code> can include unicode characters</li>
  </ul>
  
  <p>You can see some edge cases cropping up already:</p>
  
  <ul>
  <li>Some ingredients don't contain a <code>label2</code> = <code>min</code> or <code>max</code> (see <code>copper</code> and <code>vitamin c</code>). The regex grouping can be <code>None</code> in this case.</li>
  <li>Some ingredients have <code>label2</code> mispelled (see <code>vitamin e</code> uses <code>mon</code>)</li>
  <li>There may be unicode in the units</li>
  </ul>
  
  <p>Ideally, I would like a regex that can match against individual ingredients as well as a messy list (like I have provided).</p>
  
  <p>I came up with:</p>
  
  <pre><code>import re
  regex = re.compile(ur'([a-z 0-9]+)(min|max|mon)?[. ]+([0-9., ]+)((?=[%])|[a-z/]+|[^\W\d_]+/[^\W\d_]+)', re.UNICODE)
  
  
  re.findall(regex, s)
  
  # [(u'vitamin a min', u'', u'14,053 ', u'iu/kg'), (u'   vitamin c', u'', u'13,000', u'iu/kg'), (u' vitamin d max', u'', u'10,000', u'\u03bc/kg'), (u' copper', u'', u'1', u'mg/kg'), (u' vitamin e mon 10', u'', u'00', u'iu/kg')]
  
  re.findall(regex, u'vitamin a min. 14,053 iu/kg')
  
  # [(u'vitamin a min', u'', u'14,053 ', u'iu/kg')]
  </code></pre>
  
  <p>This matches nearly everything, but you can see some problems.</p>
  
  <ul>
  <li><p>the <code>label</code> is matching the <code>min</code>,<code>max</code> and <code>label2</code> matches nothing.</p></li>
  <li><p>I don't like hardcoding <code>(min|max|mon)</code> because there could be a case where the word is misspelled to something else and that hardcoding won't catch it.</p></li>
  </ul>