Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中提取数据的正则表达式_Python_Regex - Fatal编程技术网

Python中提取数据的正则表达式

Python中提取数据的正则表达式,python,regex,Python,Regex,我试图从一个网页中提取一些联系方式,我用BeautifulSoup成功地提取了一些信息 但是我不能提取一些数据,因为它没有正确构造(html)。所以我使用正则表达式。但在过去的几个小时里,我正在努力学习正则表达式,我有点被打动了 InstanceBeginEditable name="additional_content" <h1>Contact details</h1> <h2>Diploma coordinator</h2>

我试图从一个网页中提取一些联系方式,我用BeautifulSoup成功地提取了一些信息

但是我不能提取一些数据,因为它没有正确构造(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 />
有时我一个也得不到

请帮帮我


内容在网上免费提供,不侵犯版权

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

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

你问过用正则表达式做这个。假设您为每个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()
我看你用正则表达式开始的时候还行。正则表达式的关键是要记住,您通常需要定义一个数字或一组数字,然后是一个数量表达式,它告诉您希望表达式重复多少次。在本例中,我们从
开始,然后是
\s+
,它告诉正则表达式引擎我们需要一个或多个空格字符(包括换行符)。这里唯一的另一个细微差别是下一个表达式,它是
(.*)
,是一个懒惰的捕获全部-它将捕获任何内容,直到它运行到下一个表达式,即下一个


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

不要使用循环和重复concats来生成一个大字符串,使用
“”。join(iterable)
-它会更快(并确保在所有平台上都有良好的性能,而不仅仅是在CPython上)。感谢pal提供的信息。你能添加一个较长的源html代码片段和几个你想提取的地址示例吗?这将有助于起草更有用的答案。例如:联系人的前面总是有
文凭协调员
,后面是行
电子邮件联系人
?好吧,如果我把整个来源都放在这里,那就太多了。我用了美丽的汤来提取这个div。所有的都是这样的格式。非常感谢你们的努力。但是我犯了一个错误。回溯(最近的最后一次调用):文件“E:\python\Fiverr\src\Test.py”,第33行,第3行=“”.join(con.split('\n'))AttributeError:“NoneType”对象没有属性“split”您似乎编辑了该行,并将
变量更改为
con
——您在
con
中输入了什么?我已将例程编辑成一个函数,您应该能够在任何字符串中使用该函数,格式与您的示例完全相同。希望这有帮助。
['Mr. Matthew Schultz', '610 Maryhill Drive', 'Green Bay', 'WI', 'United States', '54303']
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()
('Mr. Matthew Schultz', '610 Maryhill Drive', 'Green Bay', 'WI', 'United States', '54303')