python匹配多个a标签中的内容

Python019

python匹配多个a标签中的内容,第1张

In [5]: re.findall(r'(?<=\<a\>).*?(?=\<\/a\>)','<a>that</a> <a>here</a>')

Out[5]: ['that', 'here']

这样的情况,用findall返回的正好是list。

正则表达式的意义:

(?<=XXX) 表示前面的内容是XXX,但结果中不包含;

.*?表示匹配0到多个任意字符,但是匹配尽量短的;

(?=YYY)表示后面的内容是YYY,但结果中不包含。

注意:XXX和YYY的长度必须是固定的。

要是处理的标签多的话,用BeautifulSoup吧,方便些。

其实这种问题,用正则表达式处理,非常简单。

# -*- coding: utf-8 -*-

s=u"""

<body>

    <p>

        <t>T1标签</t>

        <t>T2标签</t>

    </p>

</body>

"""

import re

labels= re.findall(r"<t>[\S]*</t>",s)  #\S是非空白字符的意思

#labels= re.findall(r"(?<=<t>)[\S]*(?=</t>)",s) #这个是稍微高级点的用法

for i in labels:

    print i

输出结果:

<t>T1标签</t>

<t>T2标签</t>

但是如果用单纯的循环查找,就很复杂了,如果你坚持,可以借鉴括号配对的算法。