Python: замена регулярных выражений

Ладно, обычно я не задаю таких вопросов.

Использование re.sub для поиска и замены обычных строк является простым, но как работают регулярные выражения в замещающей части (а не в соответствующей части)?

В частности, ссылаясь на веб-страницу Брайана Оккена, которая призвана объяснить именно это, предоставляя код для тиражирования той же функции, с которой он был связан в Pearl, но изо всех сил пытался развиваться в python.

import fileinput import re for line in fileinput.input(): line = re.sub(r'\* \[(.*)\]\(#(.*)\)', r'<h2 id="\2">\1</h2>', line.rstrip()) print(line) 

Этот подпункт должен соответствовать

 * [the label](#the_anchor) 

и замените его на

 <h2 id="the_anchor">the label</h2> 

Он работает: но как скрипт точно знает, что такое ярлык и якорь? Предположительно, \ 1 и \ 2 предназначены для соответствия желаемому тексту, но как этот скрипт знает об этом и не думает, возможно, что ведущее * относится к \ 1?

\1 и \2 в строке замены относятся к первой и второй "захватывает". Захваты являются частями регулярного выражения шаблона, которые окружены в круглых скобках.

Например, вот кадры в примере regex:

 r'\* \[(.*)\]\(#(.*)\)' ^^^^ ^^^^ 

Итак, \1 относится к тому, что было сопоставлено с первым захватом, а \2 относится к тому, что соответствовало второму захвату.