Python получить информацию из длинной сложной строки - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь получить информацию из проанализированных мной строк. Я пытаюсь получить размер шрифта. Это строка, которую я возвращаю

style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: ProjectStocksFont; font-size: 70px; font-weight: normal; font-style: normal; text-decoration: none;"

Я пытаюсь получить 70 из font-size, как лучше всего это сделать?

Ответы [ 5 ]

1 голос
/ 21 июня 2020

Использование метода .split() - это один из подходов.

Вы можете разделить строку на список python, чтобы разделить каждый вид записей в вашей строке. Затем вы можете перебирать список, разделяя каждую подстроку, и сохранять свои значения в словаре python.

style = "fill: rgb(0, 0, 0); fill-opacity: 1; font-family: ProjectStocksFont; font-size: 70px; font-weight: normal; font-style: normal; text-decoration: none;"
style_dict = {}
style = style.split("; ")

for item in style:
    key, value = item.split(": ")
    style_dict[key] = value

key = "font-size"
print(style_dict[key])
1 голос
/ 21 июня 2020

Вы можете использовать регулярные выражения, чтобы найти то, что вам нужно

    import re

    style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: ProjectStocksFont; font- 
    size: 70px; font-weight: normal; font-style: normal; text-decoration: none;"

    fontSize = re.findall("font-size: (.+)px",style)[0] # returns '70'

https://www.w3schools.com/python/python_regex.asp

1 голос
/ 21 июня 2020

Вы можете использовать регулярное выражение для sh этого, но было бы лучше использовать какой-нибудь пакет, который понимает CSS. В любом случае, попробуйте:

import re


style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: ProjectStocksFont; font-size: 70px; font-weight: normal; font-style: normal; text-decoration: none;"
font_size = re.match(r'.*font-size: ([^;^a-z]+).*', style)
1 голос
/ 21 июня 2020

В качестве альтернативы вы можете преобразовать строку в словарь. Это может быть полезно, если вы хотите получить доступ не только к этому свойству.

style_dict = dict([[a.strip() for a in s.split(':')] for s in style.split(';') if s != ""])
style_dict['font-size']

Дает

'70px'

Если вам не нужны единицы:

style_dict['font-size'][:-2]
1 голос
/ 21 июня 2020

Для задачи можно использовать модуль re:

style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: ProjectStocksFont; font-size: 70px; font-weight: normal; font-style: normal; text-decoration: none;"

import re

print( re.search(r'font-size:\s*(\d+)', style)[1] )

Распечатывает:

70
...