推荐学习书目
› 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
mrbrooks
V2EX  ›  Python

python 正则表达式疑问

  •  
  •   mrbrooks · Apr 23, 2013 · 4884 views
    This topic created in 4911 days ago, the information mentioned may be changed or developed.
    <td>数据:</td>
    <td><img src="/123/abc.jpg" border="0" /></td>



    <td>(.+?)</td> 可以匹配td之间的数据,比如上面的“数据:”
    现在我想匹配上面的“数据:” 以及 “/123/abc.jpg”

    我的理解是()得到想要的数据,然后 | 做类似的或操作
    如果需要能匹配a模式或者b模式的,是不是应该这样 ((a)|(b))
    也就是这样:
    <td>((.+?)|<img src="(.+?)" border="0" />)</td>

    但是经过测试达不到我想要的效果。
    麻烦哪位大侠解答下,谢谢!
    7 replies  •  1970-01-01 08:00:00 +08:00
    cloverstd
        1
    cloverstd  
       Apr 23, 2013
    你是想匹配得到 “数据” 和 “/123/abc.jpg” 吗?
    woshifyz
        2
    woshifyz  
       Apr 23, 2013
    你这个有两个问题,
    第一:在选择条件外加捕获括号,这样会捕获外面的分组,改成(?:
    第二:正则匹配分支条件是短路的,A|B,如果A可以匹配,不会匹配B,
    所以你的匹配可以改为:<td>(?:<img src="(.+?)" border="0" />|?:(.+?))</td>
    大概就是这个样子,没经过测试,你调试下应该就好了
    woshifyz
        3
    woshifyz  
       Apr 23, 2013
    ...好吧,测过发现错了,
    如果 <td>(?:<img src="(.+?)" border="0" />|(.+?))</td> ,这样的话,可以都匹配,但是当匹配 “数据” 时会有空分组,上面一个回答多了个?:
    mrbrooks
        4
    mrbrooks  
    OP
       Apr 23, 2013
    @cloverstd 对的。
    mrbrooks
        5
    mrbrooks  
    OP
       Apr 23, 2013
    @woshifyz 非常感谢, 你的这个方法可以,呵呵,但是跟你说的一样有空的分组。这个问题,或者不用这样的方法,有没有其他更方便的?
    oldman
        6
    oldman  
       Apr 23, 2013
    这种情况下我一般是先将<td></td>内的内容match下来,然后再取"/123/abc.jpg"(“数据”自然就会被略过了),自我感觉这样清晰一些,不知道这样是否可以满足LZ的需求
    Kabie
        7
    Kabie  
       Apr 25, 2013
    http://stackoverflow.com/a/1732454/260985
    请用lxml……
    或者你不会xpath可以用pyquery提供的api
    https://pypi.python.org/pypi/pyquery
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2407 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:14 · PVG 11:14 · LAX 20:14 · JFK 23:14
    ♥ Do have faith in what you're doing.