Regex, чтобы соответствовать любым URL-адресам изображений, кроме тех, которые закомментированы - PullRequest
0 голосов
/ 04 марта 2019

Это - это регулярное выражение, которое у меня есть для Python:

^(?<!(<!--.))(http(s?):)?([\/|\.|\w|\s|-])*\.(?:jpg|gif|png)$

Текущее выражение соответствует этому:

/images/lol/hallo.png

, но мне нужно, чтобы оно соответствовало этому изображениюurl:

/images/lol/hallo.png

и URL этого изображения без окружающих тегов:

<img src="/images/lol/hallo.png" />

, но не тех, которые закомментированы:

<!-- /images/lol/hallo.png -->
<!-- <img src="/images/lol/hallo.png" /> -->

1 Ответ

0 голосов
/ 04 марта 2019

Это должно работать:

<!--[\s\S]*?-->|(?P<url>(http(s?):)?\/?\/?[^,;" \n\t>]+?\.(jpg|gif|png))

Тестовая строка:

<img src="/images/lol/hallo.png" />
    /images/lol/hallo.png
    /images/lol/hallo.png
    //example.com/images/lol/hallo.png
    http://example.com/images/lol/hallo.png
    https://example.com/images/lol/hallo.png
    <!-- /images/lol/commented.png -->
    <!-- <img src="/images/lol/commented2.png" /> -->
    images/ui/paper-icon-1.png


/images/lol/hallo.png and more here /images/lol/hallo.png

Код Python:

import re

x = '''
    <img src="/images/lol/hallo.png" />
    /images/lol/hallo.png
    /images/lol/hallo.png
    //example.com/images/lol/hallo.png
    http://example.com/images/lol/hallo.png
    https://example.com/images/lol/hallo.png
    <!-- /images/lol/commented.png -->
    <!-- <img src="/images/lol/commented2.png" /> -->
    images/ui/paper-icon-1.png


/images/lol/hallo.png and more here /images/lol/hallo.png
'''
regexp = r'<!--[\s\S]*?-->|(?P<url>(http(s?):)?\/?\/?[^,;" \n\t>]+?\.(jpg|gif|png))'
result = [item[0] for item in re.findall(regexp, x) if item[0]]
for item in result:
    print(item)

Демонстрация: https://regex101.com/r/YmXo2Q/4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...