Регулярное выражение для получения BBCode URL

278 просмотра
0
0 Комментариев

Чем этот код:

icons = re.findall(r'<div class="post1" id="_all_groups" style="display: none; position: absolute; z-index: 3;">(.*)</div>', res)
icons = str(icons[0])

концептуально отличается от этого:

while i != len(profiles):
    profiles[i] = str((re.findall(r'[url=(.*)]', profiles[i]))[0])
    print (profiles[i])
    i = i + 1

За исключением того, разумеется, что в первом случае, я обрезаю всего одну строку, а тут несколько строк в списке. Но вот первый код работает идеально, а второй мне выводит только букву 'u'. А мне нужно получить собственно от [url=' до '], что я не могу сделать…
Содержимое profiles:

[url=http://forum.sibnet.ru/index.php?showuser=60395]
[url=http://forum.sibnet.ru/index.php?showuser=60395]
[url=http://forum.sibnet.ru/index.php?showuser=60395]


Добавить комментарий

1 Ответы

Python Опубликовано 12.12.2018
0

посмотрим внимательно на регулярное выражение

[url=(.*)]

квадратные скобки — это не просто символы, а спецзнаки, которые указывают на диапазон значений символов. То есть, к примеру [0-9] — это любая цифра, а [abc] — только один с перечисленных символов. Все спецсимволы, кроме ^ в начале и — теряют свое значение.
Поэтому, это регулярное выражение говорит — "один символ из u r l = ( . * )"
Как исправить? элементарно. нужно просто добавить по одному слешу

\[url=(.*)\]

И все сразу заработает как нужно (проверял).

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up