code: def split(self):
          
  
          split_index = []
          parts = []
  
          pattern = self.pattern.decode('latin-1') if self.is_bytes else self.pattern
  
          i = util.StringIter(pattern)
          iter(i)
          for c in i:
              if self.extend and c in EXT_TYPES and self.parse_extend(c, i):
                  continue
  
              if c == '|':
                  split_index.append(i.index - 1)
              elif c == '\\':
                  index = i.index
                  try:
                      self._references(i)
                  except StopIteration:
                      i.rewind(i.index - index)
              elif c == '[':
                  index = i.index
                  try:
                      self._sequence(i)
                  except StopIteration:
                      i.rewind(i.index - index)
  
          start = -1
          for split in split_index:
              p = pattern[start + 1:split]
              parts.append(p.encode('latin-1') if self.is_bytes else p)
              start = split
  
          if start < len(pattern):
              p = pattern[start + 1:]
              parts.append(p.encode('latin-1') if self.is_bytes else p)
  
          return tuple(parts)
docs: Start parsing the pattern.