docs: def match(self, description):
          '''
          Check to see if the provided description string matches an extract rule.
          Called internally by self.extract().
  
          @description - Description string to check.
  
          Returns the associated rule dictionary if a match is found.
          Returns None if no match is found.
          '''
          rules = []
          ordered_rules = []
          description = description.lower()
  
          for rule in self.extract_rules:
              if rule['regex'].search(description):
                  rules.append(rule)
  
          # Plugin rules should take precedence over external extraction commands.
          for rule in rules:
              if callable(rule['cmd']):
                  ordered_rules.append(rule)
          for rule in rules:
              if not callable(rule['cmd']):
                  ordered_rules.append(rule)
  
          return ordered_rules