从格式各异的字符串中提取百分比数值的技术需求
解决方案:提取并格式化可转换为百分比的数值
核心逻辑
先通过正则匹配筛选出可转换为百分比的有效数值(包括纯整数、带逗号/小数点的小数、带%后缀的数值),再按规则处理:移除百分号、小数点替换为逗号,非数值文本返回null。
匹配有效数值的正则表达式:^(\d+([.,]\d+)?)(%?)$
^和$确保匹配整个字符串,避免部分匹配\d+([.,]\d+)?匹配整数或带逗号/小数点的小数(%?)匹配可选的百分号后缀
实现示例
1. SQL(以PostgreSQL为例)
SELECT "客户ID" AS "ID", CASE -- 匹配有效数值格式 WHEN "值" ~ '^(\d+([.,]\d+)?)(%?)$' THEN -- 先移除百分号,再替换小数点为逗号 REPLACE(REPLACE("值", '%', ''), '.', ',') ELSE 'null' END AS "值" FROM your_table_name;
2. Python 实现
import re def process_percent_value(input_val): # 严格匹配有效数值格式 pattern = r'^(\d+([.,]\d+)?)(%?)$' match_result = re.fullmatch(pattern, input_val) if match_result: # 提取数值部分并替换小数点为逗号 cleaned_num = match_result.group(1).replace('.', ',') return cleaned_num return 'null' # 测试处理原始数据 raw_data = [ (1, '0,46'), (2, '25%'), (3, '无信息'), (4, '二十二'), (5, '12.2'), (6, '365%'), (7, '54') ] # 生成输出表格 print("| ID | 值 |") print("| ---- | ---- |") for customer_id, value in raw_data: print(f"| {customer_id} | {process_percent_value(value)} |")
验证结果
运行上述代码后,输出与期望表格完全一致:
| ID | 值 |
|---|---|
| 1 | 0,46 |
| 2 | 25 |
| 3 | null |
| 4 | null |
| 5 | 12,2 |
| 6 | 365 |
| 7 | 54 |
内容的提问来源于stack exchange,提问作者Макс Кроман
相关产品推荐
相关产品推荐

