python - Beautiful soup 中的正则表达式不起作用

标签 python html regex beautifulsoup

我正在尝试寻找标签。该标签的类包含以下子字符串:borderbox Flightbox p2

例如:<div class="borderbox flightbox p2 my-repeat-animation ng-scope"...

所以我认为这应该有效:

soup.find_all('div',class_=re.compile(r"borderbox flightbox p2"+".*"))

但它找不到任何东西。您有什么建议吗?

最佳答案

这应该可以满足您的要求:

def match_tag(tag, classes):
    return (tag.name == 'div'
            and 'class' in tag.attrs
            and all([c in tag['class'] for c in classes]))

divs = soup.find_all(lambda t: match_tag(t, ['borderbox', 'flightbox', 'p2'))

在 BeautifulSoup 4 中,传递给 class_ 参数的正则表达式将分别应用于每个 CSS 类。 BeautifulSoup 正在检查您的 div 持有的每个单独的 CSS 类,看看它是否与您提供的正则表达式匹配。将其放入代码中,它会执行以下操作:

for class in div['class']:
    if regexp.search(class): yield div

当然,您拥有的单个类不会与您的正则表达式匹配; 'borderbox Flightbox p2''borderbox''flightbox''p2' 中找不到。

解决方案是使用 BeautifulSoup 的功能来为您进行匹配。 match_tag 检查 (1) 标记是否是 div 以及 (2) 该标记是否具有参数 classes 指定的每个 CSS 类.

关于python - Beautiful soup 中的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927925/

相关文章:

python - 由于 tf.keras.preprocessing.text.Tokenizer.texts_to_sequences 上的 np.hstack 导致尺寸(形状)发生变化

Python:保存和恢复数据成员的装饰器

c# - 如何在 SQL WHERE 查询中引用 ASP.net 中的变量

java - 如何在 Java 代码中将调用或方法编写为正则表达式?

regex - 查找 HTML5 表单用于验证的正则表达式

python - 如何在python中将函数存储为类变量?

python - 为什么 PyCharm 错误地猜测 dict_items 列表的类型?

html - 如何 : Active State During Server Action w/o JavaScript

javascript - JQuery数据表土耳其语字符搜索问题

c++ - 使用 QRegularExpression 提取双引号内的字符串