我正在使用 Python 开发一个简单的 CSS 解析器。现在我想从这个字符串中提取所有值:"1px solid rgb(255, 255, 255)"
。现在我的模式(不起作用)是:"\S+[^rgb]+"
。当我将它与字符串 "1px solid rgb(255, 255, 255)"
一起使用时,我得到以下信息:
...
>>> re.findall("\S+[^rgb]+", string)
("1px solid", "rgb(255, 255, 255)")
我希望它成为
("1px", "solid", "rgb(255, 255, 255)")
附言
另外,有没有更好的方法来解析 CSS 声明?目前我的模式是 "[\s]?(\S+)[\s]?:[\s]?(.+)[\s]?;"
。解析 "color: red;"
给我:
("color", "red")
最佳答案
你可以试试这个:
(\S+)[ ]+(?:(\S+)[ ]+)?(rgb\([^)]+\))
编辑:无论您尝试做什么,这都可能不是正确的处理方式,因为 CSS 语法可能无法预测。您可以使用 tinycss,Python CSS 解析器以获得更理智的东西:
http://pythonhosted.org/tinycss/
最后一次编辑...
根据您的解决方案,您正在执行 findAll,它将它们分别放在一个数组中。你只需要 rgb() 在那里一次,忽略空间。这应该适用于值(value)模式,它比你拥有的更干净。还要注意,您不想使用“。”为您的 rgb() 表达式。如果你在同一行有 rgb() 1px rgb() ,默认情况下正则表达式是贪婪的......它会尽可能多地匹配。试试这个:r"(rgb([^)]+))|(\S+))"
关于Python 正则表达式 - 从 CSS 声明中获取所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599300/