docs: def _find_expr(s, start, level, parts, exprs):
      """Roughly Python/ast.c:fstring_find_expr"""
      i = start
      nested_depth = 0
      quote_char = None
      triple_quoted = None
  
      def _check_end():
          if i == len(s):
              raise SyntaxError("f-string: expecting '}'")
  
      if level >= 2:
          raise SyntaxError("f-string: expressions nested too deeply")
  
      parts.append(s[i])
      i += 1
  
      while i < len(s):
          ch = s[i]
  
          if ch == '\\':
              raise SyntaxError(
                  'f-string expression part cannot include a backslash',
              )
          if quote_char is not None:
              if ch == quote_char:
                  if triple_quoted:
                      if i + 2 < len(s) and s[i + 1] == ch and s[i + 2] == ch:
                          i += 2
                          quote_char = None
                          triple_quoted = None
                  else:
                      quote_char = None
                      triple_quoted = None
          elif ch in ('"', "'"):
              quote_char = ch
              if i + 2 < len(s) and s[i + 1] == ch and s[i + 2] == ch:
                  triple_quoted = True
                  i += 2
              else:
                  triple_quoted = False
          elif ch in ('[', '{', '('):
              nested_depth += 1
          elif nested_depth and ch in (']', '}', ')'):
              nested_depth -= 1
          elif ch == '#':
              raise SyntaxError("f-string expression cannot include '#'")
          elif nested_depth == 0 and ch in ('!', ':', '}'):
              if ch == '!' and i + 1 < len(s) and s[i + 1] == '=':
                  # Allow != at top level as `=` isn't a valid conversion
                  pass
              else:
                  break
          i += 1
  
      if quote_char is not None:
          raise SyntaxError('f-string: unterminated string')
      elif nested_depth:
          raise SyntaxError("f-string: mismatched '(', '{', or '['")
      _check_end()
  
      exprs.append(s[start + 1:i])
  
      if s[i] == '!':
          parts.append(s[i])
          i += 1
          _check_end()
          parts.append(s[i])
          i += 1
  
      _check_end()
  
      if s[i] == ':':
          parts.append(s[i])
          i += 1
          _check_end()
          i = _fstring_parse(s, i, level + 1, parts, exprs)
  
      _check_end()
      if s[i] != '}':
          raise SyntaxError("f-string: expecting '}'")
  
      parts.append(s[i])
      i += 1
      return i