Регулярное выражение для аналогичной строки - PullRequest
3 голосов
/ 27 февраля 2020

У меня есть строка, которая может быть:

X=Y 

или

X

Здесь X и Y могут быть любым словом, содержащим алфавиты.

Я хочу, чтобы когда строка равна X=Y, тогда X должен быть в группе 1, а Y - в группе 2

, но когда строка равна X, тогда X должен быть в группе 2.

Пока я могу получите только это:

(\w+)=(\w+)

Каким должно быть правильное регулярное выражение для этого?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Для сопоставления с алфавитами вам нужно использовать [a-zA-Z] (для сопоставления с любой буквой ASCII) или [^\W\d_] (для сопоставления с любой буквой Unicode), а не \w, сопоставляющее буквы, цифры или символы подчеркивания, и еще несколько символов по умолчанию в Python 3.x.

Вам нужно

^(?:([A-Za-z]+)=)?([A-Za-z]+)$

Или

^(?:([A-Za-z]+)=)?([A-Za-z]+)\Z

См. демонстрационную версию regex

Подробности

  • ^ - начало строки
  • (?:([A-Za-z]+)=)? - необязательная группа без захвата, соответствующая 1 или 0 вхождениям:
    • ([A-Za-z]+) - Группа 1: одна или несколько букв
    • = - = символ
  • ([A-Za-z]+) - Группа 2: одна или больше букв
  • \Z - самый конец строки ($ соответствует концу строки).
0 голосов
/ 27 февраля 2020

У вас почти было это с вашим оригинальным регулярным выражением.

Требуется всего лишь пара настроек:

^(\w+)(=(\w+))?$
  • ^ = начало строки
  • (\w+) = 1-я группа захвата, соответствующая любому словоподобному символу (включая цифры), столько раз, сколько возможно.
  • (=...)? = все, что находится внутри этой 2-й группы захвата (начиная с "="), необязательно
  • 2-ой (\w+) = 3-я группа захвата, соответствующая тому же материалу, что и первый *
  • $ = конец строки

обновление

Мой ответ на самом деле не отвечает на исходный вопрос, поскольку строка «X» не попадает в «X» во второй группе ответов.

Я рассмотрел вопрос об удалении ответа, но собираюсь продолжайте в том же духе ради других посетителей сайта, которые ищут более простой ответ, который не требует, чтобы "X" был конкретно во второй группе захвата.

Кроме того, возможно, первоначальный аскер предпочел бы иметь более простое регулярное выражение и изменить их код для работы с R egex вместо регулярного выражения для работы с кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...