使正则表达式适应python re模块

时间:2017-06-26 17:29:52

标签: python regex

我有一个正则表达式,可以在div id="content"之前删除文件中的所有内容,并包括/ <div id="footer"之后

Live test

([\s\S]*)(?=<div id="content")|(?=<div id="footer)([\s\S]*)

我正在使用re模块在python中使用正则表达式。我在python中使用的代码:

file = open(file_dir)
content = file.read()
result = re.search('([\s\S]*)(?=<div id="content")|(?=<div id="footer)([\s\S]*))', content)

我也尝试过使用re.match。我无法返回我想要的内容。现在我只能让它在div#content

之前返回所有内容

3 个答案:

答案 0 :(得分:3)

虽然不是advisable,但您可以提取内容而不是简单地匹配它:

import re

rx = re.compile(r'''
        .*?
        (
            <div\ id="content"
            .+?
        )
        <div\ id="footer
        ''', re.VERBOSE | re.DOTALL)

content = rx.findall(your_string_here, 1)[0]
print(content)

<小时/> 这产生了

<div id="content" class="other">
i have this other stuff 
<div>More stuff</div>

a demo on regex101.com。更好的是:使用解析器,例如而是BeautifulSoup

答案 1 :(得分:2)

如果您允许我发表评论:HTML +正则表达式=疯狂。 :)

HTML通常是不规则的,一些流浪角色会破坏最聪明的正则表达式。此外,许多看似HTML的网页实际上并不像HTML那样容易获得。同时,有几个可爱的加工网站产品正在不断发展,其中包括BeautifulSoup,selenium和scrapy。

>>> from io import StringIO
>>> import bs4
>>> HTML = StringIO('''\
... <body>
...     <div id="container">
...         <div id="content">
...             <span class="something_1">some words</span>
...             <a href="https://link">big one</a>
...         </div>
...     <div>
...     <div id="footer">
... </body>''')
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> soup.find('div', attrs={'id': 'container'})
<div id="container">
<div id="content">
<span class="something_1">some words</span>
<a href="https://link">big one</a>
</div>
<div>
<div id="footer">
</div></div></div>

答案 2 :(得分:1)

此RegEx应该有效:https://regex101.com/r/L1zzOc/1

\<div id=\"content\"[.\s\S]*?(?=\<div id=\"footer\")

您的原始代码中似乎有拼写错误,并且在第一个"之后忘记了<div id="footer>