Чтобы расширить объяснения регулярных выражений, используемых Авинаш в своем answer:
Category:([^\[\]]*)
состоит из нескольких частей:
Category:
, который совпадает с текстом «Категория:»
(...)
является захват группы означает примерно «выражение внутри этой группы представляет собой блок, который я хочу, чтобы извлечь»
[^...]
является инвертированный множество, которое означает «делать не соответствуют никаким символам в этом наборе ».
\[
и \]
соответствуют "[" и "]" в тексте соответственно.
*
означает «матч ноль или более из предшествующих регулярных выражений определены элементы»
Где я использовал ...
, чтобы указать, что я удалил некоторые символы, которые не были важны для объяснения.
Так положить все это вместе, регулярное выражение делает это:
Находки «Категория:», а затем совпадает с любым количеством (включая ноль) символов после этого, не исключенные символы «[» или «]». Когда он попадает в исключенный символ, он останавливается, и текст, соответствующий регулярному выражению внутри части (...)
, возвращается. Поэтому регулярное выражение фактически не ищет "[[" или "]]", как вы могли ожидать, и поэтому будет соответствовать, даже если они не учтены. Вы можете заставить его искать двойные квадратные скобки в начале и конце, изменив его на \[\[Category:([^\[\]]*)\]\]
.
Для второго регулярного выражения Category:[^\[\]]*
группа захвата (...)
исключена, поэтому Python возвращает все, что соответствует «Category:».
Что у вас есть? – AndersNS