这个实现是使用tinycss完成的,这是一个简单的纯python
css parser.
这适用于不整洁的CSS.只要是合法的.
import tinycss
from collections import defaultdict
parser = tinycss.make_parser('page3')
# use parse_stylesheet_files to read from a file.
stylesheet = parser.parse_stylesheet("""h1 {color: #333; background-color: transparent}
h2 {
font-weight:300
}
h3
{
font-weight: 200
}
h1{
padding: 0px;}
""")
# Initialize to empty list if key does not exists
# This allows to group multiple blocks with same selectors
temp = defaultdict(list)
for rule in stylesheet.rules:
for dec in rule.declarations:
temp[rule.selector.as_css()].append((dec.name, dec.value.as_css()))
print(temp)
输出:
defaultdict(,
{'h1': [('color', '#333'),
('background-color', 'transparent'),
('padding', '0px')],
'h2': [('font-weight', '300')],
'h3': [('font-weight', '200')]})
看看不同的h1块如何被分成一个列表.我并不是非常清楚CSS的复杂性,但是很容易防止这种情况发生.
与使用正则表达式的解决方案不同,它更灵活,因为它涵盖了所有边缘情况,适用于选择器,CSS2和CSS3.
请注意:我已将所有内容都推送到字典中,但您也可以轻松地将其作为列表推送.让我知道你是否想要一些纯粹的列表,但如果你理解我在做什么,它应该是相对微不足道的.