This makes multiple successive character classes work, but it does introduce some clutter in the language_parser function, I'll get back to that later