【问题标题】:Python Regex Findall StatementPython 正则表达式 Findall 语句
【发布时间】:2013-07-07 03:16:51
【问题描述】:

我是一个业余程序员,对这个网站很陌生。我已经搜索过这个问题,但在互联网或本网站的其他任何地方都没有找到。

我正在尝试抓取打开和关闭段落 html 标记之间的所有单词(<p></p>)。我的 findall 声明适用于所有段落中的所有单词,特别是在线文章,除了有单引号或双引号的地方。完全有可能有更好的方法来做我正在尝试做的事情,或者可以轻松地调整此语句以包含带引号的段落。任何建议将不胜感激!

findall 语句:

aText = findall("<p>[A-Za-z0-9<>=\"\:/\.\-,\+\?#@'<>;%&\$\*\^\(\)\[\]\{\}\|\\!_`~ ]+</p>",text) 

【问题讨论】:

  • 步骤 1) 在您喜欢的搜索引擎中搜索“美汤”。步骤 2) 遵循其从 HTML 元素中提取文本的清晰示例之一。没有第 3 步,它实际上是一个相当优雅的库,仅用于此目的:)

标签: regex python-3.x findall


【解决方案1】:
>>> t = "<p>there isn't much here</p>"
>>> re.findall(r'<p>(.+?)</p>',t)
["there isn't much here"]

嵌入" 的示例:

>>> t = r"<p>there isn't much \"to go by\" here</p>"
>>> re.findall(r'<p>(.+?)</p>',t)
['there isn\'t much \\"to go by\\" here']

通常+ 是一个贪婪 限定符,通过在末尾添加? 我们使其非贪婪,它试图实现最小匹配。所以它会消耗部分字符串直到&lt;/p&gt;可以匹配。

【讨论】:

  • 这会起作用(我投票赞成它的正确性),但您需要注意它的局限性。关闭 &lt;/p&gt; 标记是可选的(尽管如果缺少则无效),&lt;p&gt; 元素可以具有 idclass 之类的属性,这些属性会破坏这个正则表达式。
【解决方案2】:

使用像 Beautiful soup 这样的 HTML 解析引擎来做到这一点:

from BeautifulSoup import BeautifulSoup

html_doc= """
<p>
paragraph 1
</p>

<p>
paragraph 2
</ap>

<p>
paragraph 3
</p>
"""

soup = BeautifulSoup(html_doc)

soup.findAll('p')

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多