用python中的Regex获取C中的javadocstyle注释

2024-10-02 08:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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类的列表,但这只是返回一个块中的整个字符串。在

谁能给我指出正确的方向吗?在

谢谢。 马特


Tags: 文件文本re目录脚本内容格式样式
2条回答

{(.*)}是一个贪婪的匹配,它将从第一个{到最后一个}匹配,这样就可以吞掉其中可能存在的{/}对。你想要非贪婪匹配,也就是说

{(.*?)}

不同的是星号后面的问号,使它不贪婪。在

如果需要正确匹配“嵌套”大括号,这仍然不起作用,但是,在RE世界中,没有任何东西会:在正则语言中,许多众所周知的限制(正则语言是正则表达式可以匹配的语言)是不可能“正确嵌套”任何类型的左/右括号(一些难以置信的扩展称为RE-manage-to,但不是Python的,任何有CS背景的人都会发现无论如何,把这些表达式称为“正规的”冒犯性的;—)。如果您需要REs无法承受的更一般的解析,pyparsing或其他成熟的Python解析器是正确的选择。在

@Alexis right(他从来没有?但我离题了)。如果需要比正则表达式所能提供的更具体的解析,那么最好使用自定义解析器。幸运的是,您不必重新设计(CSS解析)轮子。已经有一个现有的解决方案。在

我以前也遇到过类似的要求。cssutils模块当时派上了用场。我刚刚刷新了我的cssutils fu,为您编写了以下代码片段:

In [16]: import cssutils

In [17]: s = """/**thirdpartycss
* @description Used for fixing stuff
*/
.class_one {
    margin: 10px;
}
#id_two {
    padding: 2px;
}"""

In [26]: sheet = cssutils.parseString(s)

In [27]: sheet.cssRules
Out[27]: 
[cssutils.css.CSSComment(cssText=u'/**thirdpartycss\n* @description Used for fixing stuff\n*/'),
 cssutils.css.CSSStyleRule(selectorText=u'.class_one', style=u'margin: 10px'),
 cssutils.css.CSSStyleRule(selectorText=u'#id_two', style=u'padding: 2px')]

In [28]: sheet.cssRules[0].cssText
Out[28]: u'/**thirdpartycss\n* @description Used for fixing stuff\n*/'

In [29]: print sheet.cssRules[0].cssText
   -> print(sheet.cssRules[0].cssText)
/**thirdpartycss
* @description Used for fixing stuff
*/

您可以解析CSS,然后遍历sheet对象的cssRules来查找所有的{}实例。在

相关问题 更多 >

    热门问题