任何人都可以解释如何从输入字符串中提取子字符串。
输入:
'<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.
答案 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
结果不是None
。
find
方法也接受迭代器,因此您可以将静态元组传递给它。
结果将是与任何所询问类型匹配的标记对象(如果有)。
tag = soup.find(("h1", "h2", "h3"))
当然,最好事先确切知道哪个标签包含你想要的东西......
如果页面上同时包含<h1>
和<h2>
标记,您就不知道该怎么做...