V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
revotu
V2EX  ›  Python

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

  •  
  •   revotu · 2017-06-30 13:18:40 +08:00 · 2841 次点击
    这是一个创建于 2485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个需求,从 css 文件中提取所有 ID 名和 CLASS 名到两个 list 中

    用正则可以准确的实现这个功能么?
    9 条回复    2017-07-01 10:52:15 +08:00
    ShindouHIkaru
        1
    ShindouHIkaru  
       2017-06-30 13:27:57 +08:00
    正则可以实现,主要注意的是特殊符号(比如\n 空格 ,)以及注释的分割,最好是自己动手试试,发现不行了,贴出代码让大家找一下问题,这样比较好,而不是贴个需求上来就问
    revotu
        2
    revotu  
    OP
       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);
    ShindouHIkaru
        4
    ShindouHIkaru  
       2017-06-30 14:07:09 +08:00
    @revotu 提供你一个思路,在不考虑派生选择器和注释的情况下 id 和 class 后面是要跟‘{'符号的,你这样的条件显然不够
    revotu
        5
    revotu  
    OP
       2017-06-30 15:09:22 +08:00
    @ShindouHIkaru 注释可以不考虑 , 可是派生选择器 得考虑 所以我是宁可多了一些 没有少

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

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

    background-color: #fff;

    排除了这种 我的匹配 id 应该就准确了吧
    ShindouHIkaru
        7
    ShindouHIkaru  
       2017-06-30 18:42:03 +08:00
    @revotu 我不确定你的文件的复杂性,但是如果是通常的写法,可以利用行头直接判断
    r'^\.([\w_-]+)'
    r'^#([\w_-]+)'
    都加上了'^'符号,你可以看看有没有全部选中。可以试试哈
    ps: 可以在 sublime 直接能看到正则结果
    ShindouHIkaru
        8
    ShindouHIkaru  
       2017-06-30 18:44:27 +08:00
    @revotu 因为不同的文件,正则的复杂程度是不一样的,只要针对目标写出最简单的写法,我觉得就足够了,如果你加上^还是不行的话,你可以贴出你的 css 文件一起看看怎么解决
    P233
        9
    P233  
       2017-07-01 10:52:15 +08:00
    写个 PostCSS 插件做这个事情会轻松地多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2767 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:47 · PVG 20:47 · LAX 05:47 · JFK 08:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.