(python)正则匹配多个\n的方法

2013-08-05 22:01:06 +08:00
 jwu
html:

<td bgcolor="#e9f2e9" valign="top">Teacher Name:
</td>
<td>
<a href="TeacherInfo.asp?uid=2050"><b>Elodie Préaud</b></a><br>


为了定位到Elodie Préaud,我用的办法是
Teacher Name:\n.*\n.*\n.*<b>(.*)<\/b><\/a><br>

虽然成功了,但\n.*匹配换行及还行后的全部内容太笨了,请问有其他办法吗?
5483 次点击
所在节点    问与答
8 条回复
xunyu
2013-08-05 22:12:21 +08:00
一行一行的读了匹配行不?
yangg
2013-08-05 22:15:34 +08:00
(?s)Teacher Name:.*?<b>(.*?)</a><br/>

(?s) 开启单行匹配模式,.匹配所有的字符
jwu
2013-08-05 22:26:00 +08:00
@yangg 在范例中的确可以了,但如果放到html全文(多个类似的段落)去好像就不行了,匹配结果的List为空
hhrmatata
2013-08-05 22:40:36 +08:00
# encoding: utf-8

import re

html = """
<td bgcolor="#e9f2e9" valign="top">Teacher Name:
</td>
<td>
<a href="TeacherInfo.asp?uid=2050"><b>Elodie Préaud</b></a><br>
"""


pattern = re.compile('Teacher Name.*?<b>(.*?)</b>', re.DOTALL)

result = pattern.search(html).group(1)

print result
jwu
2013-08-05 22:55:21 +08:00
@hhrmatata 今天困扰了一天的问题被您解决了!感谢!我来分析下关键的.*?这三个字麻烦看我是否理解正确了,由于开启了re.DOTALL,因此.匹配任何包括换行内容;*匹配0或多个,而加上?代表非贪婪,即匹配文档中第一次出现即匹配
vmebeh
2013-08-05 23:00:07 +08:00
ur'<a\shref="TeacherInfo\.asp\?uid=\d+"><b>(.*)</b></a>'
hhrmatata
2013-08-05 23:41:04 +08:00
@jwu 恩,是这样的
msg7086
2013-08-05 23:57:28 +08:00
这种匹配我宁愿先用split('Teacher Name')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX