Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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
使regex适应pythonre模块_Python_Regex - Fatal编程技术网

使regex适应pythonre模块

使regex适应pythonre模块,python,regex,Python,Regex,我有一个正则表达式,可以在div id=“content”之前和之后删除文件中的所有内容。虽然没有,但您可以提取内容,而不是简单地匹配它: import re rx = re.compile(r''' .*? ( <div\ id="content" .+? ) <div\ id="footer ''', re.VERBOSE | re.DOTALL)

我有一个正则表达式,可以在
div id=“content”
之前和
之后删除文件中的所有内容。虽然没有,但您可以提取内容,而不是简单地匹配它:

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)
重新导入
rx=重新编译(r''
.*?
(
这个正则表达式应该可以:


\

请允许我发表评论:HTML+regex=madness.)

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>
>>从io导入StringIO
>>>进口bs4
>>>HTML=StringIO(“”)\
... 
...     
...         
…一些话
...             
...         
...     
...     
... ''')
>>>soup=bs4.BeautifulSoup(HTML,“lxml”)
>>>soup.find('div',attrs={'id':'container'})
一些词

您想删除与该正则表达式匹配的部分,而不是查找并返回与该正则表达式匹配的部分吗?您想包括
标记还是要删除这些标记?我想包括
标记,直到您向我们显示完全正确的输出为止,它是不明确的。@revo不确定您要查找的atm是什么。您看到live te了吗st link?同意这是不可取的。但是我有大约40000页要看,我不想花很长时间,所以我的想法是正则表达式会比解析器快。你同意吗?@BrianEdelman:大部分是这样,是的。如果你总是有相同的结构,它很可能会工作。记住,你可能会不要因为注释或嵌套的
结构而得到意外的结果-正则表达式不是解析器。感谢您的回答。因为这是我要求的,所以将其标记为正确,尽管我最终选择了解析器。显然,这样做是疯狂的。感谢您的提交!我最终选择了解析器,即使它会稍微慢一点。我想It’没有StringIO,我们就可以生成与上面类似的代码。这有什么好处?StringIO的好处只是,我不必创建文件来提供示例。:)而且,scrapy的作者说,他们的东西比BeautifulSoup快。你不必编写刮刀就可以使用它。哦,使用StringIO,我可以在答案中显示HTML的内容。
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>
\<div id=\"content\"[.\s\S]*?(?=\<div id=\"footer\")
>>> 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>