我正在编写一个python脚本来遍历CSS文件的目录,并保存包含特定格式的javadoc样式注释的内容。在
注释/CSS如下所示:
/**thirdpartycss
* @description Used for fixing stuff
*/
.class_one {
margin: 10px;
}
#id_two {
padding: 2px;
}
获取文件全部内容的正则表达式如下所示:
^{pr2}$这给了我文件的内容。我现在要做的是编写一个regex来获取类中的每个CSS定义。这就是我所尝试的:
rule_pattern = "(.*){(.*)}?"
rules = re.findall(rule_pattern, matches[0], flags=re.MULTILINE | re.DOTALL)
基本上,我试图找到任何文本,然后是一个开始{,任何文本,然后是一个结束}-我想要一个所有CSS类的列表,但这只是返回一个块中的整个字符串。在
谁能给我指出正确的方向吗?在
谢谢。 马特
{(.*)}
是一个贪婪的匹配,它将从第一个{
到最后一个}
匹配,这样就可以吞掉其中可能存在的{
/}
对。你想要非贪婪匹配,也就是说不同的是星号后面的问号,使它不贪婪。在
如果需要正确匹配“嵌套”大括号,这仍然不起作用,但是,在RE世界中,没有任何东西会:在正则语言中,许多众所周知的限制(正则语言是正则表达式可以匹配的语言)是不可能“正确嵌套”任何类型的左/右括号(一些难以置信的扩展称为RE-manage-to,但不是Python的,任何有CS背景的人都会发现无论如何,把这些表达式称为“正规的”冒犯性的;—)。如果您需要REs无法承受的更一般的解析,pyparsing或其他成熟的Python解析器是正确的选择。在
@Alexis right(他从来没有?但我离题了)。如果需要比正则表达式所能提供的更具体的解析,那么最好使用自定义解析器。幸运的是,您不必重新设计(CSS解析)轮子。已经有一个现有的解决方案。在
我以前也遇到过类似的要求。cssutils模块当时派上了用场。我刚刚刷新了我的cssutils fu,为您编写了以下代码片段:
您可以解析CSS,然后遍历}实例。在
sheet
对象的cssRules
来查找所有的{相关问题 更多 >
编程相关推荐