text: """Util for Conversation."""
  import re
  
  
  def create_matcher(utterance):
      """Create a regex that matches the utterance."""
      # Split utterance into parts that are type: NORMAL, GROUP or OPTIONAL
      # Pattern matches (GROUP|OPTIONAL): Change light to [the color] {name}
      parts = re.split(r"({\w+}|\[[\w\s]+\] *)", utterance)
      # Pattern to extract name from GROUP part. Matches {name}
      group_matcher = re.compile(r"{(\w+)}")
      # Pattern to extract text from OPTIONAL part. Matches [the color]
      optional_matcher = re.compile(r"\[([\w ]+)\] *")
  
      pattern = ["^"]
      for part in parts:
          group_match = group_matcher.match(part)
          optional_match = optional_matcher.match(part)
  
          # Normal part
          if group_match is None and optional_match is None:
              pattern.append(part)
              continue
  
          # Group part
          if group_match is not None:
              pattern.append(rf"(?P<{group_match.groups()[0]}>[\w ]+?)\s*")
  
          # Optional part
          elif optional_match is not None:
              pattern.append(rf"(?:{optional_match.groups()[0]} *)?")
  
      pattern.append("$")
      return re.compile("".join(pattern), re.I)
  