Python 正则表达式 - 从 CSS 声明中获取所有值

标签 python css regex parsing

我正在使用 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\([^)]+\))

http://regex101.com/r/vA4kH1

编辑:无论您尝试做什么,这都可能不是正确的处理方式,因为 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/

相关文章:

python - 如何读取生成器表达式

python - 使用多处理写入多个文件。错误 : "TypeError: cannot serialize ' _io. TextIOWrapper 对象”

html - 如何阻止 header 中的 css 格式化 html 中的其他对象

Javascript Image Slider - 需要添加按钮

javascript - 提取与特定模式匹配的所有值

java - 检测正则表达式中的特定标点符号的奇怪行为

python - 如何通过 Python 访问数位板数据?

python - Django UpdateView 没有表单来更新对象

html - 水平滚动但第一列固定的表格

MySql 和正则表达式