2016-11-23 3 views
0

Для небольшой идеи о том, что такое проект, я пытаюсь сделать язык разметки, который компилируется в HTML/CSS. Я планирую форматирование ссылок следующим образом: @ (link mask) [(link url)], и я хочу найти все вхождения этого и получить как маску ссылки, так и URL-адрес ссылки.Как найти несколько одинаковых форматов в Python?

Я попытался с помощью этого кода для него:

re.search("@(.*)\[(.*)\]", string) 

Но это началось в начале первой инстанции, и закончился в конце последней инстанции ссылки. Любые идеи, как я могу найти его в списке или что-то еще?

ответ

0

поведение по умолчанию регулярного выражения «жадные соответствия». Это означает, что каждый .* будет соответствовать столько символов, сколько он может.

Вы хотите, чтобы они соответствовали минимально возможному количеству символов. Для этого измените каждый .* в .*?. Последний знак вопроса заставит шаблон соответствовать минимальному количеству символов. Поскольку вы привязываете свой шаблон к знаку ], он все равно будет соответствовать/потреблять всю ссылку правильно.

0

* жадный: он соответствует как можно большему количеству символов, например. до последней правой скобки в вашем документе. (В конце концов, . означает «любой символ» и ) является «любой символ», как и любой другой символ.)

Вам нужен нежадным версию *, которая *?. (Возможно, на самом деле вы должны использовать +? , так как я не думаю, что нулевой длины матчи будут очень полезны).

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