You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何正则匹配宗教人口数据时返回<td>标签而非数字?

问题分析与解决

核心错误原因

你的正则表达式写法完全搞反了捕获目标:

  • 你写的"(&lt;?&lt;td&gt;)[0-9,]*"里,捕获组()把<td>的转义字符&lt;td&gt;包含在内,所以正则只会捕获到<td>标签,而不是后面的数字。
  • 另外,你已经将BeautifulSoup节点转为字符串,不需要用&lt;td&gt;这种转义写法,直接写<td>即可。

修正方案

方案1:修正正则表达式

把获取believers的代码改成下面这样:

# 用捕获组直接抓取<td>标签内的数字部分
believers = re.findall(r"<td>([0-9,]+)", religion_population)
# 注意:字符串是不可变类型,replace不会修改原变量,需要重新赋值
believers = [x.replace(",", "") for x in believers]
print(believers)

这样就能得到纯数字字符串的列表,要是需要数值类型,再转成int或float即可。

方案2:用BeautifulSoup直接提取(更可靠)

其实没必要把节点转成字符串再用正则,直接用BeautifulSoup的API提取更稳定,避免HTML结构小变动导致正则失效:

religion_table = doc.find(id="religion")
# 找到所有<td>标签,提取文本并过滤出数字内容
believers = [td.get_text().strip().replace(",", "") for td in religion_table.find_all("td") if td.get_text().strip().replace(",", "").isdigit()]
print(believers)

额外提示

处理HTML解析时,优先用BeautifulSoup的节点查找方法,正则只适合处理纯文本内容,直接用正则匹配HTML字符串很容易因为标签属性、换行等问题出错。

内容的提问来源于stack exchange,提问作者Virtual Adept

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:06:27