从字符串

时间:2017-07-04 13:34:02

标签: python

任何人都可以解释如何从输入字符串中提取子字符串。

输入:

'<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>'

输出:

'<h3>freedom machines.</h3>'

我正在尝试使用正则表达式,但没有运气。 你有什么建议吗?

我需要检查我的字符串是否从任何标头标记<h1><h2><h3>)开始,如果是,我会提取标题标记。

我尝试使用startswith,但没有成功:

if input.startswith("<h"):
  ** Code to extract that h tag.

2 个答案:

答案 0 :(得分:2)

您可以使用re.search在<h3>标记之间提取文本。

<h3>.*?</h3>模式表示匹配<h3>标记之间的任何内容。

>>> import re
>>> text = '<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>'
>>> match = re.search("<h3>.*?</h3>", text, re.IGNORECASE | re.MULTILINE)
>>> print(match.group())

'<h3>freedom machines.</h3>'

答案 1 :(得分:1)

使用BeautifulSoup:

html = '<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>'
soup = BeautifulSoup(html)
text = soup.find("h3").string

这是BeautifulSoup的基本用法。 使用字符串作为参数创建BeautifulSoup对象。 然后使用其find方法查找具有您正在寻找的名称的代码。 最后,使用string属性获取标记环绕的文本。

如果您知道自己的文字位于<h1><h2><h3>,但您不知道哪个,请尝试所有这些内容。 你甚至可以一次检查三个:

tag = soup.find("h1") or soup.find("h2") or soup.find("h3")
text = tag.string

or运算符将返回第一个以布尔方式计算为True的成员。 在这种情况下,它表示第一个soup.find结果不是Nonefind方法也接受迭代器,因此您可以将静态元组传递给它。 结果将是与任何所询问类型匹配的标记对象(如果有)。

tag = soup.find(("h1", "h2", "h3"))

当然,最好事先确切知道哪个标签包含你想要的东西...... 如果页面上同时包含<h1><h2>标记,您就不知道该怎么做...