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

如何从带逗号的数值中提取数字?维基百科JSON数据提取问题

解决维基百科JSON人口数据提取的逗号与标签问题

我太懂这种头疼的情况了——维基百科JSON里的人口数值带千位分隔逗号,还有时隐时现的标签,确实会把原来的正则搞崩。给你几个实用的解决思路:

核心思路:先捕获带逗号的数值,再清理逗号;同时兼容有无标签的情况

我们可以写一个弹性的正则表达式,先精准匹配等号后的人口数值(包含逗号),再把逗号去掉;同时让标签成为可选匹配项,不管它存在与否都不影响数值提取。

推荐的正则表达式

population\s*=\s*([\d,]+)(?:<ref.*?>.*?</ref>)?

各部分解释:

  • population\s*=\s*:匹配"population ="的核心结构,允许等号前后有任意空格(处理维基百科可能的格式差异)
  • ([\d,]+):捕获组,专门提取数字和逗号的组合(这就是我们要的原始人口数值)
  • (?:<ref.*?>.*?</ref>)?:可选的非捕获组,匹配完整的标签及其内部内容,末尾的?表示这部分可以不存在

额外兼容自闭合标签

如果遇到自闭合的<ref />标签,可以把正则调整为:

population\s*=\s*([\d,]+)(?:<ref.*?/>|<ref.*?>.*?</ref>)?

代码示例(以Python为例)

import re

# 测试两种典型字符串
sample_with_ref = "population = 1,234,567<ref>数据来源:维基百科人口统计</ref>"
sample_without_ref = "population = 987,654"

# 使用正则匹配
pattern = r'population\s*=\s*([\d,]+)(?:<ref.*?>.*?</ref>)?'

# 处理带ref的字符串
match1 = re.search(pattern, sample_with_ref)
if match1:
    raw_population = match1.group(1)
    clean_population = raw_population.replace(',', '')
    print(f"提取的人口数值:{clean_population}")  # 输出:1234567

# 处理不带ref的字符串
match2 = re.search(pattern, sample_without_ref)
if match2:
    raw_population = match2.group(1)
    clean_population = raw_population.replace(',', '')
    print(f"提取的人口数值:{clean_population}")  # 输出:987654

效果说明

不管目标字符串里有没有标签,这个正则都能精准捕获到等号后的带逗号数值,再通过replace(',', '')就能得到纯数字的人口数据,完美解决逗号干扰和标签存在与否的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:22