Jeder Regex kann durch einen DFA dargestellt werden. Wenn du dir diesen aufzeichnest, ergibt sich daraus abschreibfertig direkt der reguläre Ausdruck.
* =: Kleensche Hülle,
. =: Konkatenation (Schnitt)
Für L2: ((a + c)* + b) . ((a + c)* + b) . ((a + c)* + b) . (a + c)*
Es ist also sicher gestellt, das genau 3 b im Wort enthalten sind.
Es wird entweder a oder c gewählt, so oft man will. Sobald das erste b gewählt wurde, muss der Automat seinen Zustand ändern um die Eingabe zu erfassen. Danach wiederholt man sozusagen den Schritt noch 2 Mal, eben genau so lange bis die Anzahl von b = 3 ist. Es ist zu jedem Zeitpunkt gewährleistet dass es unendlich viele a und c geben darf, aber nur genau 3 b. Am Ende habe ich noch mal (a + c)* angehängt, damit das Wort nicht nur mit b enden kann.
Natürlich kann man viele reguläre Ausdrücke noch vereinfachen, indem man Wiederholungen in den Konkatenationen erkennt, und diese elegant unter einen Hut bringt. Um die Aufgabe formal richtig zu lösen, reicht es aber den DFA in den "erst besten" gültigen Regex um zu schreiben.