首页 > 解决方案 > 用于在 HTML 行中查找整数的正则表达式

问题描述

我正在尝试从使用 BeautifulSoup 包提取的 HTML 代码行中提取整数值,但是我收到以下错误消息,但我不知道为什么。

每个跨度标签都可以毫无问题地检索,它看起来像这样:

TAG  <span class="comments">2</span>

我需要在正则表达式中实施任何更改,还是我的代码存在实际问题?

我试图修改正则表达式,并删除 numlist = list()

[...]
import re

numlist = list()
totalsum = 0
count = 0

[...]

#Retrieve all of the span tags
tags = soup('span')
for tag in tags:
count = count + 1
    numlist = re.findall('([0-9]+)', tag)
    if len(numlist) > 0:
        for item in numlist:
            totalsum = totalsum + int(item)

print("Count ",count)
print("Total Sum", totalsum)

totalsum 函数应该总结所有找到的值,但我在命令提示符中收到以下错误消息:

Traceback (most recent call last):
  File "assignment1week4.py", line 23, in <module>
    numlist = re.findall('([0-9]+)', tag)
  File "C:\Users\konst\AppData\Local\Programs\Python\Python37-32\lib\re.py", line 223, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

标签: pythonregexpython-3.x

解决方案


这看起来是一个代码问题。你得到一个TypeError告诉你你需要将一个字符串传递给re.findall. 我们知道那'([0-9]+)'是一个字符串,所以它一定tag不是。IIRC,使用 BeautifulSoup 查找类型的所有标签返回代表 HTML 标签的对象数组,而不是字符串列表。

这个答案有一些关于获取字符串文本的信息,但如果你不想查看所有这些信息,它可以归结为使用.text属性,例如numlist = re.findall('([0-9]+)', tag.text).


推荐阅读