Python 如何从 css 文件中提取所有 ID 名和 CLASS 名

2017-06-30 13:18:40 +08:00
 revotu
有个需求,从 css 文件中提取所有 ID 名和 CLASS 名到两个 list 中

用正则可以准确的实现这个功能么?
2849 次点击
所在节点    Python
9 条回复
ShindouHIkaru
2017-06-30 13:27:57 +08:00
正则可以实现,主要注意的是特殊符号(比如\n 空格 ,)以及注释的分割,最好是自己动手试试,发现不行了,贴出代码让大家找一下问题,这样比较好,而不是贴个需求上来就问
revotu
2017-06-30 13:32:49 +08:00
@ShindouHIkaru

classValues = re.findall(r'\.([\w_-]+)',content)

idValues = re.findall(r'#([\w_-]+)',content)

但是会多出好多并不属于 ID 和 class 的值,

比如下面情况:

background-color: #fff;
-webkit-box-shadow: 0 0 2px 0 rgba(31, 31, 31, 0.07);
porrat
2017-06-30 13:55:18 +08:00
ShindouHIkaru
2017-06-30 14:07:09 +08:00
@revotu 提供你一个思路,在不考虑派生选择器和注释的情况下 id 和 class 后面是要跟‘{'符号的,你这样的条件显然不够
revotu
2017-06-30 15:09:22 +08:00
@ShindouHIkaru 注释可以不考虑 , 可是派生选择器 得考虑 所以我是宁可多了一些 没有少

还是没有准确得到我想要的, 但也很感谢了 提供的思路
revotu
2017-06-30 17:36:21 +08:00
idValues = re.findall(r'#([\w_-]+)',content)

我想知道 我这种匹配 id 的时候 怎样能排除那种后面紧跟着着分号的:

background-color: #fff;

排除了这种 我的匹配 id 应该就准确了吧
ShindouHIkaru
2017-06-30 18:42:03 +08:00
@revotu 我不确定你的文件的复杂性,但是如果是通常的写法,可以利用行头直接判断
r'^\.([\w_-]+)'
r'^#([\w_-]+)'
都加上了'^'符号,你可以看看有没有全部选中。可以试试哈
ps: 可以在 sublime 直接能看到正则结果
ShindouHIkaru
2017-06-30 18:44:27 +08:00
@revotu 因为不同的文件,正则的复杂程度是不一样的,只要针对目标写出最简单的写法,我觉得就足够了,如果你加上^还是不行的话,你可以贴出你的 css 文件一起看看怎么解决
P233
2017-07-01 10:52:15 +08:00
写个 PostCSS 插件做这个事情会轻松地多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372147

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX