title: regular expression findall() in Python
body: <p>If I have this string:</p>
  
  <pre><code>s = "this, that; talk, love, hate; good, bad, all good."
  </code></pre>
  
  <p>And I want to extract the items separated by , ; or .</p>
  
  <p>So the result I want is:</p>
  
  <pre><code>["this", "that", "talk", "love", "hate", "good", "bad", "all good"]
  </code></pre>
  
  <p>If I use this Python regular expression:</p>
  
  <pre><code>re.findall(r"([a-z]+[,;.])+", s)
  </code></pre>
  
  <p>I get the result:</p>
  
  <pre><code>['this,', 'that;', 'talk,', 'love,', 'hate;', 'good,', 'bad,', 'good.']
  </code></pre>
  
  <p>which is close to what I want, except for the last item.</p>
  
  <p>Strangely, if I include a space in the first square bracket, as in:</p>
  
  <pre><code>re.findall(r"([a-z ]+[,;.])+", s)
  </code></pre>
  
  <p>then I only get this result:</p>
  
  <pre><code>[' all good.']
  </code></pre>
  
  <p>But findall() is supposed to find all results, no?  Can someone explain this strange behavior?</p>