Use that goodn't meme
Retina, 86 70 65 bytes
T`-'`L
\bnot?\s+(?!not?\b)(\w+?)n?\b
$1n't
\bnot?\b
yesn't
T`L`-'

-16 bytes thanks to @Neil.
-5 bytes thanks to @ovs.
Try it online.
Explanation:
T`-'`L             # Replace all &quot;-&quot; with &quot;A&quot; and all &quot;'&quot; with &quot;B&quot; to store them

\bnot?             # Then replace the word &quot;no&quot; or &quot;not&quot;,
 \s+               #  followed by 1 or more whitespaces,
 (?!not?\b)(\w+?)  #  followed by a word/letter that is not &quot;not&quot; or &quot;no&quot;
 n?\b              #  minus a single trailing &quot;n&quot; if there are any
$1                 # with: the word/letter
 n't               #  appended with &quot;n't&quot;

\bnot?\b           # Then replace any remaining loose &quot;no&quot; or &quot;not&quot;
yesn't             # with &quot;yesn't&quot;

T`L`-'             # And finally replace all &quot;A&quot; with &quot;-&quot; and all &quot;B&quot; with &quot;'&quot; again