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

正则捕获带逗号小数:energy列表转指定DataFrame的问题

解决Python列表转指定DataFrame的正则提取问题

需求说明

现有Python列表energy,元素为包含多组键值对的字符串(键是带空格的能源名称,值是带逗号的小数),需将其转换为包含key和value两列的DataFrame,目标格式如下:

key   value
0                      Wind    1.00          
1                     Water    7.36         
2    Renewable Cogeneration    9.71          
3          Other Renewables    9.65      
4               Solid Waste    2.80      
5       Fossil Cogeneration    2.17
6               Natural Gas   56.35
7                      Coal    9.73
8                   Nuclear    0.64

此前的正则表达式提取出了冗余内容,生成的结果包含多余后续文本,需要修正正则以精准提取每组独立的键值对。

解决方案

正确的正则表达式

使用以下正则可精准匹配每组键值对:

(\w+(?:\s+\w+)*)\s+(\d+,\d{2})
  • (\w+(?:\s+\w+)*):匹配包含空格的完整键名(如Renewable Cogeneration),非捕获组(?:\s+\w+)*允许键包含多个空格分隔的单词
  • \s+:匹配键与值之间的间隔空格
  • (\d+,\d{2}):匹配带两位小数的数值格式(如1,00)

完整代码实现

import re
import pandas as pd

# 示例输入列表
energy = [
    'Wind 1,00 Water 7,36 Renewable Cogeneration 9,71 Other Renewables 9,65 Solid Waste 2,80',
    'Fossil Cogeneration 2,17 ',
    'Natural Gas 56,35 Coal 9,73 Nuclear 0,64 '
]

# 编译正则模式
pattern = re.compile(r'(\w+(?:\s+\w+)*)\s+(\d+,\d{2})')

# 收集所有键值对
key_value_pairs = []
for item in energy:
    # 去除字符串首尾空格,避免无效匹配
    cleaned_item = item.strip()
    # 提取当前字符串中所有匹配的键值对
    matches = pattern.findall(cleaned_item)
    for key, val in matches:
        # 将逗号替换为点,转换为浮点数值
        key_value_pairs.append({'key': key, 'value': float(val.replace(',', '.'))})

# 生成目标DataFrame
result_df = pd.DataFrame(key_value_pairs)
print(result_df)

代码说明

  1. 使用re.compile()预编译正则,提升匹配效率
  2. 对每个列表元素执行strip()去除首尾空格,避免无效匹配
  3. findall()方法一次性提取字符串中所有符合规则的键值对,不会产生冗余内容
  4. 将数值中的逗号替换为点并转为float类型,符合DataFrame的数值格式要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:35:21