Python coroutine structure
The expression ''.join(str(s) for s in self.characters simply returns a copy of self.characters. Consider phrasing it

    return color.RED + self.characters + color.END


Similarly ','.join(str(s) for s in self.contents seems longer than necessary.

This does not appear to be used:

    def __bool__(self):
        return True


I'm afraid you lost me here:

    gen = curr_group(iter(line))


I don't see any mentions that define line.

Yielding a value to co-routine seems to be working fine, just as you wish.