首页 > 解决方案 > 使用 BeautifulSoup 在字符串开头进行正则表达式模式匹配

问题描述

我目前正在寻找一种在 HTML 类名的开头通过正则表达式执行模式匹配的方法。我要匹配的模式是:

"col-xs-.*"

HTML 页面中的两个类示例是:

<div class="col-xs-12 col-sm-12 col-lg-12">
<div class="mod-tiles__sizer col-xs-6 col-sm-4 col-lg-3">

目标是只匹配上面的类名,因为它实际上以“col-xs-.*”开头,这就是我所追求的。使用我当前的正则表达式匹配,我似乎无法将这些类名单独列出。目前我正在尝试使用以下正则表达式模式进行匹配:

regex = re.compile('^col-xs-.*$')
soup.find_all("div", class_ = regex)

不幸的是,这种模式还会打印出第二个类名(其中“col-xs-.*”出现在中间,而不仅仅是在开头)。希望有人能解决这个问题。

标签: regexpython-3.xbeautifulsoup

解决方案


我认为您希望以 ^ 运算符开头的属性 = 值css 选择器来指定要在类属性中查找的前缀字符串。

soup.select('[class^="col-xs-"]')

例子:

from bs4 import BeautifulSoup as bs

html = '''
<div class="col-xs-12 col-sm-12 col-lg-12">
<div class="mod-tiles__sizer col-xs-6 col-sm-4 col-lg-3">
'''
soup = bs(html, 'lxml')
classes = [' '.join(item['class']) for item in soup.select('[class^="col-xs-"]')]
print(classes)

推荐阅读