在 python 中使用 findall 获取所有事件

get all occurence with findall in python

我需要得到 "relay.albacom.net" 和 "smtp.albacom.net"

import re

string="""<tr bgcolor="#d3ebf8"><td>Albacom</td><td>relay.albacom.net</td><td></td></tr><tr bgcolor="#d3ebf8"><td>Albacom</td><td>smtp.albacom.net</td><td></td></tr>"""

test=re.findall(r'<tr bgcolor="#d3ebf8"><td>.*</td><td>(.*)</td><td>.*</td></tr>', string)

print test

然而,我只得到['smtp.albacom.net']

下面的.*是指任意一个字符吧?所以它应该可以工作...

谢谢!

使用Non-greedyselect或:

<tr bgcolor="#d3ebf8"><td>.*?</td><td>(.*?)</td><td>.*?</td></tr>

当您使用 .* 而没有 ? 正则表达式时,请尝试为该表达式捕获尽可能多的字符。但添加一个 ?,尽可能少地强制它 select。

Check this sample

test = re.findall('[a-z]+\.albacom\.[a-z]+',string)

我相信这应该允许您以更通用的方式在字符串中找到形式为 .albacom. 的项目。