If you're trying to find long lines of subtitle text and then find a grammar appropriate place to break the line up within the first 23 characters (or 24 if there's one of the punctuation characters you've specified), then this should do the job:
(?=^.{42,}$)(.{,23}\b[,.:;"!?]?) \b(.*)
I'm not an expert in written English grammar but I'm pretty sure within a single line of text whole words are always separated by space character. The first whole word of a two whole word pair may be followed by a punctuation character but if so the punctuation character has to be followed by a space character. This in part was why your regular expression patterns weren't working for you.
The space between the two words where you're separating the line parts doesn't need to be captured when reformatted one line into two lines. It isn't proper formatting to carry that space character with the second part of the line. Also, keeping the space character with the first line part isn't necessary and if kept could add some complications dealing with it in any later text manipulations.
The one thing the grep pattern doesn't handle is the double space characters after punctuation marks carried over from the typewriter days. If the text you're dealing with has that, change the " \b" to " {1,2}\b" (all without the " characters).