У вас почти было это с вашим оригинальным регулярным выражением.
Требуется всего лишь пара настроек:
^(\w+)(=(\w+))?$
^
= начало строки (\w+)
= 1-я группа захвата, соответствующая любому словоподобному символу (включая цифры), столько раз, сколько возможно. (=...)?
= все, что находится внутри этой 2-й группы захвата (начиная с "="), необязательно - 2-ой
(\w+)
= 3-я группа захвата, соответствующая тому же материалу, что и первый * $
= конец строки
обновление
Мой ответ на самом деле не отвечает на исходный вопрос, поскольку строка «X» не попадает в «X» во второй группе ответов.
Я рассмотрел вопрос об удалении ответа, но собираюсь продолжайте в том же духе ради других посетителей сайта, которые ищут более простой ответ, который не требует, чтобы "X" был конкретно во второй группе захвата.
Кроме того, возможно, первоначальный аскер предпочел бы иметь более простое регулярное выражение и изменить их код для работы с R egex вместо регулярного выражения для работы с кодом.