V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jwu
V2EX  ›  问与答

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

  •  
  •   jwu · 2013-08-05 22:01:06 +08:00 · 5609 次点击
    这是一个创建于 4129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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.*匹配换行及还行后的全部内容太笨了,请问有其他办法吗?
    8 条回复    1970-01-01 08:00:00 +08:00
    xunyu
        1
    xunyu  
       2013-08-05 22:12:21 +08:00
    一行一行的读了匹配行不?
    yangg
        2
    yangg  
       2013-08-05 22:15:34 +08:00
    (?s)Teacher Name:.*?<b>(.*?)</a><br/>

    (?s) 开启单行匹配模式,.匹配所有的字符
    jwu
        3
    jwu  
    OP
       2013-08-05 22:26:00 +08:00
    @yangg 在范例中的确可以了,但如果放到html全文(多个类似的段落)去好像就不行了,匹配结果的List为空
    hhrmatata
        4
    hhrmatata  
       2013-08-05 22:40:36 +08:00   ❤️ 1
    # 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
        5
    jwu  
    OP
       2013-08-05 22:55:21 +08:00
    @hhrmatata 今天困扰了一天的问题被您解决了!感谢!我来分析下关键的.*?这三个字麻烦看我是否理解正确了,由于开启了re.DOTALL,因此.匹配任何包括换行内容;*匹配0或多个,而加上?代表非贪婪,即匹配文档中第一次出现即匹配
    vmebeh
        6
    vmebeh  
       2013-08-05 23:00:07 +08:00
    ur'<a\shref="TeacherInfo\.asp\?uid=\d+"><b>(.*)</b></a>'
    hhrmatata
        7
    hhrmatata  
       2013-08-05 23:41:04 +08:00
    @jwu 恩,是这样的
    msg7086
        8
    msg7086  
       2013-08-05 23:57:28 +08:00
    这种匹配我宁愿先用split('Teacher Name')
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:56 · PVG 19:56 · LAX 03:56 · JFK 06:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.