Regular expression for language that does not accept x string (3 letters, |x|=3)
You can create a complete DFA (with all transitions populated) and then just invert the set of start and end states. In your case, using grammar notation, this accepts all strings with the sequence $cab$:

$$\begin{align*}
S &amp; \rightarrow Q_0 \\
Q_0 &amp; \rightarrow a Q_0\,|\,b Q_0\,|\,c Q_1\\
Q_1 &amp; \rightarrow a Q_2\,|\,b Q_0\,|\,c Q_1\\
Q_2 &amp; \rightarrow a Q_0\,|\,b Q_3\,|\,c Q_1\\
Q_3 &amp; \rightarrow a Q_3\,|\,b Q_3\,|\,c Q_3\,|\,\epsilon
\end{align*}$$

So this accepts all strings without the sequence $cab$:

$$\begin{align*}
S &amp; \rightarrow Q_0 \\
Q_0 &amp; \rightarrow a Q_0\,|\,b Q_0\,|\,c Q_1\,|\,\epsilon\\
Q_1 &amp; \rightarrow a Q_2\,|\,b Q_0\,|\,c Q_1\,|\,\epsilon\\
Q_2 &amp; \rightarrow a Q_0\,|\,b Q_3\,|\,c Q_1\,|\,\epsilon\\
Q_3 &amp; \rightarrow a Q_3\,|\,b Q_3\,|\,c Q_3
\end{align*}$$

Now you just have to convert that into a regular expression. Whether or not that's easier is up to you.

You can also directly construct a DFA which accepts $(a|b|c)^*bac(a|b|c)^* \setminus (a|b|c)^*cab(a|b|c)^*$ using Brzozowski's method, but that's a bit tricky to do by hand for this example.