code: def sent_tokenize(context):
      
  
      # Define the regular expression
      paired_symbols = [("(", ")"),
                    ("[", "]"),
                    ("{", "}")]
      paired_patterns = ["%s.*?%s" % (re.escape(lt), re.escape(rt)) for lt, rt in paired_symbols]
      number_pattern = ['\d+\.\d+']
      arr_pattern = ['(?: \w\.){2,3}|(?:\A|\s)(?:\w\.){2,3}|[A-Z]\. [a-z]|\svs\. |et al\.|Fig\. \d|approx\.|(?:Prof|Dr)\. (?:[A-Z]\.)?']
  
      # Find the string which matches the above pattern, and remove than from the context, to get a stem string
      escape_re = re.compile("|".join(paired_patterns + number_pattern + arr_pattern))
      escapes = escape_re.findall(context)
      escaped_stem = escape_re.sub('{}', context)
  
      escaped_escaped_stem = escaped_stem.replace('{','{{').replace('}', '}}')
  
      # Find the linebreaks
      sent_re = re.compile(r'([A-Z0-9]..+?(?:[.!?]\s+|[\n$]+))')
      linebreaks = sent_re.findall(escaped_escaped_stem)
      sent_stem = sent_re.sub(r'\1###linebreak###', escaped_escaped_stem)
      recovered_sent_stem = sent_stem.replace('{{}}', '{}')
      result = recovered_sent_stem.format(*escapes)
      return [r for r in result.split('###linebreak###') if r is not '']
docs: Cut the given context into sentences.
      Avoid a linebreak in between paried symbols, float numbers, and some abbrs.
      Nothing will be discard after sent_tokeinze, simply ''.join(sents) will get the original context.
      Evey whitespace, tab, linebreak will be kept.
  
      >>> context = "I love you. Please don't leave."
      >>> sent_tokenize(context)
      ["I love you. ", "Please don't leave."]