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
mrbrooks
V2EX  ›  Python

python 正则表达式疑问

  •  
  •   mrbrooks · 2013-04-23 10:50:28 +08:00 · 3492 次点击
    这是一个创建于 4019 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <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 条回复    1970-01-01 08:00:00 +08:00
    cloverstd
        1
    cloverstd  
       2013-04-23 11:30:15 +08:00
    你是想匹配得到 “数据” 和 “/123/abc.jpg” 吗?
    woshifyz
        2
    woshifyz  
       2013-04-23 11:36:39 +08:00
    你这个有两个问题,
    第一:在选择条件外加捕获括号,这样会捕获外面的分组,改成(?:
    第二:正则匹配分支条件是短路的,A|B,如果A可以匹配,不会匹配B,
    所以你的匹配可以改为:<td>(?:<img src="(.+?)" border="0" />|?:(.+?))</td>
    大概就是这个样子,没经过测试,你调试下应该就好了
    woshifyz
        3
    woshifyz  
       2013-04-23 11:39:30 +08:00
    ...好吧,测过发现错了,
    如果 <td>(?:<img src="(.+?)" border="0" />|(.+?))</td> ,这样的话,可以都匹配,但是当匹配 “数据” 时会有空分组,上面一个回答多了个?:
    mrbrooks
        4
    mrbrooks  
    OP
       2013-04-23 11:56:31 +08:00
    @cloverstd 对的。
    mrbrooks
        5
    mrbrooks  
    OP
       2013-04-23 12:06:44 +08:00
    @woshifyz 非常感谢, 你的这个方法可以,呵呵,但是跟你说的一样有空的分组。这个问题,或者不用这样的方法,有没有其他更方便的?
    oldman
        6
    oldman  
       2013-04-23 13:19:44 +08:00
    这种情况下我一般是先将<td></td>内的内容match下来,然后再取"/123/abc.jpg"(“数据”自然就会被略过了),自我感觉这样清晰一些,不知道这样是否可以满足LZ的需求
    Kabie
        7
    Kabie  
       2013-04-25 01:08:34 +08:00
    http://stackoverflow.com/a/1732454/260985
    请用lxml……
    或者你不会xpath可以用pyquery提供的api
    https://pypi.python.org/pypi/pyquery
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1917 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 321ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.