2

Я довольно новичок в регулярном выражении (регулярные выражения) и нуждаюсь в небольшой помощи в формулировке строки. Я понимаю это по большей части, но в тупик, когда текст, который мне нужен для сопоставления, имел переменные, за которыми следовала дополнительная фраза.Строки регулярных выражений с последовательными переменными

Скажите, что текст отформатирован примерно так: «Включите $ 1 [the] lights», где «$ 1» - это переменная, которую я хочу, пока «the» может быть включен или оставлен. Я пробовал следующую аннотацию, "Turn (+.) (?)? \ S * огни", который работает на "включить свет":

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on lights").groups() 
("on",) 

Но когда я включаю свои "" и попробуйте сопоставить «включить свет», я получаю «на» как свою переменную.

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on the lights").groups() 
("on the",) 

Это что-то, что может быть выполнено с помощью библиотеки регулярных выражений? Прошу прощения, если вопрос непонятен, спасибо заранее!

ответ

3

Вам просто нужно использовать ленивый квантор для этого:

turn (.+?) (?:the)?\s*lights 

RegEx Demo

+1

++ приятный и быстрый ..! – Shafizadeh

+1

Я не уверен, что получаю вашу мысль. Но я думаю, вы должны задать этот вопрос из OP. Также, основываясь на вашей демонстрации, позвольте мне сказать «да», ваш шаблон работает ':-)' – Shafizadeh

+0

Извините @Shafizadeh: вопрос был не для вас, а для OP, был ли этот ответ выработан или нет – anubhava

1

Если я правильно понял вопрос правильно, вы пытаетесь написать регулярное выражение, которое будет соответствовать фразы, которые включают в себя, но не ограничивается следующим:

  • очереди на свете
  • выключает свет
  • Включите фары
  • выключить свет

регулярное выражение, которое делает это можно записать так:

turn (.+?) (the)?lights

Сломался частью:

  • turn : просто.
  • (.+?): захватывает один или несколько символов, но ? указывает на это, чтобы не получить жадность. Вы можете прочитать о жадности here
  • (the)? окружен круглыми скобками, чтобы сделать ? применимым к целому слову, делая в целом the необязательным. Это также создаст группу захвата, но вы можете смело игнорировать этот факт.
  • lights: простой.
+1

Отличный ответ, я ценю подробное объяснение! – spatel4140

 Смежные вопросы

  • Нет связанных вопросов^_^