Как использовать css_parser, чтобы получить это свойство? - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу напечатать URL "woff" для каждого "семейства шрифтов", но css_parser.CSSParser().style.property.value - это атомарная строка, которую нельзя разделить.

Как написать код?

#!/usr/bin/env python3
import css_parser

CSSstr='''
@font-face {
    font-family: "Arial";
    src: url("https://www.com/test1.eot");
    src: url("https://www.com/test1.eot?#iefix") format("embedded-opentype"), url("https://www.com/test1.woff2") format("woff2"), url("https://www.com/test1.woff") format("woff"), url("https://www.com/test1.svg") format("svg");
}
@font-face {
    font-family: "Arial Italic";
    src: url("www.com/test2.eot");
    src: url("www.com/test2.eot?#iefix") format("embedded-opentype"), url("www.com/test2.woff2") format("woff2"), url("www.com/test2.woff") format("woff"), url("www.com/test2.svg") format("svg");
}
'''

parser = css_parser.CSSParser()
sheet = parser.parseString(CSSstr)

for rule in sheet:
    if rule.type == 5:
        # find property
        for property in rule.style:
            if property.name == 'font-family':
                print(property.value)
            if property.name == 'src':
                print(property.value)

Я хочу вывод как:

Arial
https://www.com/test1.woff
Arial Italic
https://www.com/test2.woff

1 Ответ

0 голосов
/ 22 февраля 2019

Как вы говорите, это просто атомарная строка.

Обходной путь : используйте регулярное выражение для захвата ваших данных.

import re

...

for rule in sheet:
    if rule.type == 5:
        # find property
        for property in rule.style:
            if property.name == 'font-family':
                print(property.value)
            if property.name == 'src':
                match = re.search(r'.*url\((.*woff)\)\.*', property.value)
                print(match.group(1))

Объяснение выражения:

  • .*url\( некоторая строка, начинающаяся с любых символов, а затем url(.
  • (.*woff) данные, которые будут получены.Любой текст, законченный woff.
  • \)\.*, заканчивающийся ), а затем любой текст.

Я надеюсь, что это будет решением для вас.

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