code: def find_methods(self, classname=".*", methodname=".*", descriptor=".*",
              accessflags=".*", no_external=False):
          
          for cname, c in self.classes.items():
              if re.match(classname, cname):
                  for m in c.get_methods():
                      z = m.get_method()
                      # TODO is it even possible that an internal class has
                      # external methods? Maybe we should check for ExternalClass
                      # instead...
                      if no_external and isinstance(z, ExternalMethod):
                          continue
                      if re.match(methodname, z.get_name()) and \
                         re.match(descriptor, z.get_descriptor()) and \
                         re.match(accessflags, z.get_access_flags_string()):
                          yield m
docs: Find a method by name using regular expression.
          This method will return all MethodClassAnalysis objects, which match the
          classname, methodname, descriptor and accessflags of the method.
  
          :param classname: regular expression for the classname
          :param methodname: regular expression for the method name
          :param descriptor: regular expression for the descriptor
          :param accessflags: regular expression for the accessflags
          :param no_external: Remove external method from the output (default False)
          :rtype: generator of `MethodClassAnalysis`