【发布时间】:2012-06-25 17:17:48
【问题描述】:
我想解析这个 CSS 选择器(以及其他类似形式的选择器):
div.class1#myid.class2[key=value]
让它匹配“.class1”和“.class2”,但我不知道要使用什么正则表达式..
示例:http://www.rubular.com/r/3dxpzyJLeK
在理想世界中,我还想提取:
- 类型(即 div)
- 类(即类列表)
- id(即 myid)
- 键(即键)
- 运算符(即=)
- 值(即值)
但我无法掌握基础知识!
任何帮助将不胜感激:)
谢谢!
【问题讨论】:
-
如果您想要所有这些信息,最好使用pyparsing 之类的东西。看起来已经有几个库在这样做了——cthedot.de/cssutils 和 code.google.com/p/css-py——虽然还不清楚它们有多完整。
-
理论上,
[key=value]可能不止一个,要么使用单独的键值列表,要么使用包含键值对的属性列表。而且“标签”可能比“类型”更合适。 -
另外,属性有更多变体,属性值有无引号:
[type]、[type^=value]、[type$=value]等,如果这很重要,那么它可能是也需要存储属性运算符。 -
学习语法:w3.org/TR/CSS21/grammar.html 并查看现有的 regex-for-CSS-selectors 问题:stackoverflow.com/questions/tagged/regex+css-selectors
-
顺便说一句,“key”、“operator”和“value”不应单独解析 - 将它们一起解析为属性选择器,并可选地捕获 operator/value。
标签: python regex css-selectors