Python中提取d的正则表达式

2024-04-16 08:54:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个网页中提取一些联系方式,并成功地用美丽汤提取了一些信息。在

但是我不能提取一些数据,因为它没有被正确地构造(html)。所以我使用正则表达式。但最近几个小时我在学习正则表达式,我有点吃惊。在

 InstanceBeginEditable name="additional_content" 
<h1>Contact details</h1>
<h2>Diploma coordinator</h2>


                                Mr. Matthew Schultz<br />
<br />
                                    610 Maryhill Drive<br />


                                Green Bay<br />
                                WI<br />
                                United States<br />
                                54303<br />
Contact by email</a><br />
                                Phone (1) 920 429 6158          
                                <hr /><br />

我需要提取

马修·舒尔茨先生

马里希尔大道610号 绿湾 威斯康星州 美国 54303号

还有电话号码。我尝试了从谷歌搜索中找到的东西。但没有一个是有效的(因为我的知识不多,但在这里我最后的努力。在

^{pr2}$

有时我什么也得不到。在

请帮帮大家!在

内容是免费的,在网上没有侵犯版权。在


Tags: 数据namebr信息网页htmlcontacth2
2条回答

好的,使用您的数据,编辑将解析例程嵌入函数中

def parse_list(source):
    lines = ''.join( source.split('\n') )
    lines = lines[ lines.find('</h2>')+6 : lines.find('Contact by email') ]                   
    lines = [ line.strip()
              for line in lines.split('<br />')
              if line.strip() != '']
    return lines

# Parse the page and retrieve contact string from the relevant <div>
con = ''' InstanceBeginEditable name="additional_content" 
<h1>Contact details</h1>
<h2>Diploma coordinator</h2>


                                Mr. Matthew Schultz<br />
<br />
                                    610 Maryhill Drive<br />


                                Green Bay<br />
                                WI<br />
                                United States<br />
                                54303<br />
Contact by email</a><br />
                                Phone (1) 920 429 6158          
                                <hr /><br />'''


# Extract details and print to console

details = parse_list(con)
print details

这将输出一个列表:

^{pr2}$

你问过用正则表达式做这个。假设您为每个div获取一个新的多行字符串,其中包含该数据,您可以这样提取数据:

import re

m = re.search('</h2>\s+(.*?)<br />\s+<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />\s+(.*?)<br />', con )
if m:
    print m.groups()

输出:

^{pr2}$

我看你在regex上有一个不错的开始。regex的关键是要记住,您通常需要定义一个数字或一组数字,后跟一个数量表达式,它告诉它您希望表达式重复多少次。在本例中,我们从</h2>开始,然后是\s+,它告诉regex引擎我们需要一个或多个空格字符(包括换行符)。这里唯一的另一个细微差别是下一个表达式(.*?)是一个延迟捕获all-它将捕获任何内容,直到它遇到下一个表达式<br />。在

编辑:另外,您应该能够清理正则表达式,方法是利用名称后面的所有地址信息都是统一格式的这一事实。我玩了一点,但没有得到它,所以如果你想改善它,这将是一个方法。在

相关问题 更多 >