регулярное выражение python не соответствует указанному [duplicate]

size = 3
matrix_surprise = [[0] * size] * size
matrix = [[0]*size for i in range(size)]

Frames and Objects [/g1]

Live Python Tutor Визуализировать

2
задан zx81 21 July 2014 в 04:08
поделиться

1 ответ

Группа повторных захватов: номер группы остается тем же

Группа, определенная (..), является группой 1. Конец квантора + повторяет его. Каждый раз, когда движок может повторять группу (совпадающие с двумя символами), группа 1 перезаписывается.

  • Когда двигатель начинает совпадать, он захватывает aa в группу 1
  • Затем он фиксирует bb до группы 1
  • . Затем захватывает cc в группу 1.

Когда вы проверяете группу 1, двигатель возвращает cc. Все остальные записи потеряны.

(Исключением является механизм .NET, который также возвращает cc, а также позволяет проверять промежуточные захваты благодаря объекту CaptureCollection. Он будет содержать aa, bb и cc .)

С помощью (..)+(...), почему группа 1 содержит aa? Откат!

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

  • Еще раз, когда двигатель начинает совпадать, он захватывает aa в группу 1
  • Опять же, он повторяет группу (..) и фиксирует bb в группе 1
  • . Опять же, он повторяет группу (..) и захватывает cc в группу 1
  • Теперь двигатель пытается сопоставить (...). Он терпит неудачу: нет никаких символов, оставшихся для потребления.
  • Двигатель отступает как в строке, так и в шаблоне регулярных выражений. + означает один или несколько раз, и мы сопоставили .. три раза, поэтому мы можем дать один или даже два. На этом этапе двигатель отказывается от последнего совпадения количественной группы (..)+, которая является cc. Мы вернулись, когда группа 1 была bb.
  • Двигатель снова пытается сопоставить (...). Осталось всего два символа: cc, поэтому он снова не работает.
  • Двигатель отступает, отказываясь от последнего совпадения количественной группы (..)+, которая является bb. На этом этапе группа 1 снова aa.
  • Двигатель снова пытается сопоставить (...). Успешно: группа 2 - bbc, а группа 1 - aa

Ссылка

4
ответ дан zx81 20 August 2018 в 18:02
поделиться
  • 1
    FYI Я добавил подробное объяснение внутренности двигателя для случая (..)+(...). Также настоятельно рекомендуем прочитать «Сведения о горах». статья связана. :) – zx81 21 July 2014 в 03:52
  • 2
    Решил удалить мою, не хотелось писать историю. – hwnd 21 July 2014 в 03:56
  • 3
    @hwnd Да, довольно интересно понять, как это работает, но, как вы говорите, вам нужно написать весь рассказ о двигателе. :) – zx81 21 July 2014 в 04:04
  • 4
    Эй Deqing, я добавил много деталей, поэтому, пожалуйста, дайте мне знать, если что-то неясно. :) – zx81 21 July 2014 в 04:22
  • 5
    Очень подробно, спасибо zx81 – Deqing 21 July 2014 в 06:49
Другие вопросы по тегам:

Похожие вопросы: