title: Splitting names that include "de", "da", etc. into first, middle, last, etc
body: <p>I want to split Brazilian names into parts. However there are names like below where <code>"de"</code>, <code>"da"</code> (and others) that are not separate parts and they always go with the following word. So normal split doesn't work.</p>
  
  <pre><code>test1 = "Francisco da Sousa Rodrigues" #special split
  test2 = "Emiliano Rodrigo Carrasco" #normal split
  test3 = "Alberto de Francia" #special split
  test4 = "Bruno Rezende" #normal split
  </code></pre>
  
  <p>My expected output would be:</p>
  
  <pre><code>[Francisco, da Sousa, Rodrigues] #1
  [Emiliano, Rodrigo, Carrasco] #2
  [Alberto, de Francia] #3
  [Bruno, Rezende] #4
  </code></pre>
  
  <p>For the special cases I tried this pattern:</p>
  
  <pre><code>PATTERN = re.compile(r"\s(?=[da, de, do, dos, das])")
  re.split(PATTERN, test1) (...)
  </code></pre>
  
  <p>but the output is not what I expected:</p>
  
  <pre><code>['Francisco', 'da Sousa Rodrigues'] #1
  ['Alberto', 'de Francia'] #3
  </code></pre>
  
  <p>Any idea how to fix it? Is there a way to just use one pattern for both "normal" and "special" case?</p>