import re
html_string = '<span class="cd__headline-text">Is this model too thin for Yves Saint Laurent? </span>'
regex = re.compile(r'(?<=>).*(?=<)')
result = regex.findall(html_string)[0]
>>> markup = '<span class="cd__headline-text">Is this model <em>too thin</em> for Yves Saint Laurent? </span>'
>>> soup = BeautifulSoup(markup)
>>> headline = soup.find(class_='cd__headline-text')
>>> headline.string is None
True
>>> print list(headline.strings)
[u'Is this model ', u'too thin', u' for Yves Saint Laurent? ']
>>> print list(headline.stripped_strings)
[u'Is this model', u'too thin', u'for Yves Saint Laurent?']
>>> print headline.get_text()
Is this model too thin for Yves Saint Laurent?
>>> print headline.get_text(' - ', strip=True)
Is this model - too thin - for Yves Saint Laurent?
>>> headline.contents
[u'Is this model ', <em>too thin</em>, u' for Yves Saint Laurent? ']
>>> from bs4 import NavigableString
>>> [el for el in headline.children if isinstance(el, NavigableString)]
[u'Is this model ', u' for Yves Saint Laurent? ']
不应该使用正则表达式,而应该使用诸如beauthoulsoup之类的html解析器。您还可以将etree库与xpath一起用于复杂的用例。在
不过,如果你想用正则表达式-
正则表达式是一种特定于域的语言,它使字符串解析和处理更加容易。虽然,有些人可能不同意正则表达式提供了许多优雅的解决方案,但字符串上的循环可能永远是。-
在这个正则表达式中,我使用了正则表达式的look ahead和look behind。 就学习正则表达式而言,它需要相当多的时间。我建议你去读一些关于regex的好教程或书。在
如果元素只包含文本,请使用^{} attribute :
如果包含其他标记,则可以获取当前元素中包含的所有文本,或者只获取当前元素中的特定文本。在
^{} function 将递归并收集元素和子元素中的所有字符串,将它们与您选择的字符串连接起来(默认为空字符串),并使用或不使用空格剥离。在
要只获取特定的字符串,可以遍历^{} or ^{} generators ,或者使用element contents访问所有包含的元素,然后选择
NavigableString
类型的实例。在示例演示:
^{pr2}$并添加了一个附加元素:
相关问题 更多 >
编程相关推荐