【问题标题】:Filter strings into list depending on position - Python根据位置将字符串过滤到列表中 - Python
【发布时间】:2013-09-16 18:53:15
【问题描述】:

例如,这是我的字符串:

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

我想要实现的是:

myList = ['Hello World!','Hello Dennis!']

使用正则表达式或其他方法,如何过滤掉myString中的段落文本而忽略html标签以实现myList

我试过了:

import re
a="<body><p>Hello world!</p><p>Hello Denniss!</p></body>"
result=re.search('<p>(.*)</p>', a)
print result.group(1)

结果是:Hello world!&lt;/p&gt;&lt;p&gt;Hello Denniss!,当我尝试(.*)(.*) 时,我得到了Hello World!

这个字符串只是一个例子。该字符串也可能是 &lt;garbage&gt;abcdefghijk&lt;gar&lt;bage&gt;,具体取决于 Web 开发人员对网站的编码方式。

这可能是一个复杂的正则表达式,但我需要学习这一点,因为这是我将在今年晚些时候参加的网络安全竞赛,我认为我最好的选择是开发一种在 @ 之间搜索文本的算法987654332@ 和 &lt;

我该怎么办?

对不起,如果我的问题格式不正确,我有一点学习问题。

【问题讨论】:

  • @TyrantWave FWIW
  • @HamZa - 嗯,我不太同意那个元数据,特别是当问题是关于提取文本时(哪个正则表达式确实失败了)。我当然永远不会将其链接为答案,至少在没有给出完整解释的情况下。评论就是这样 - 对问题的评论。

标签: python html regex


【解决方案1】:

您想去掉html 文本中的所有标签吗?我不会选择正则表达式,最好其他方法,例如使用BeautifulSoup,你会在黑客会议上大吃一惊:

from bs4 import BeautifulSoup

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

myList = list(BeautifulSoup(myString).strings))

它产生:

['Hello World!', 'Hello Dennis!']

【讨论】:

  • 谢谢你,它真的很有用..我用 unicode 获取它有关系吗?例如 [u'Hello',u'World!']
  • @vjgaero:据我所知是正确的。 BeautifulSouphtml 代码中提取时解码它们。
【解决方案2】:

使用正则表达式进行 HTML 解析绝对是 limited,但如果您想要真正的 HTML 挖掘解决方案,请尝试查看此插件 BeautifulSoup

至于你的正则表达式,asterisk 量词是贪婪,它会一直吃到最后一个&lt;/p&gt;。所以,你应该使用(?=XXX) 命令,这意味着搜索直到找到XXX

尝试以下方法:

re.findall(r'<p>(.*?)(?=</p>)', s)

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 2023-03-14
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2011-01-10
    • 2022-11-29
    • 2015-05-08
    相关资源
    最近更新 更多