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

Python正则提取文本speed值报NoneType下标错误的解决方法

报错原因

两个问题共同导致报错:

  1. 正则规则编写错误。你给出的示例数据里speed属性值是被双引号包裹的,格式为speed="24.87",但你写的匹配规则r'speed=([\d.]+)'要求speed=后面直接跟数字或小数点,没有考虑中间的双引号,哪怕是格式正确的vehicle行也会匹配失败,返回None。
  2. 缺少匹配结果判空逻辑。fcd.xml是SUMO输出的标准XML文件,里面除了vehicle标签行,还会包含XML声明、根标签、<timestep>时间步标签、空行等内容,这些行本身没有speed字段,正则匹配时同样会返回None。你直接对返回值取下标[1],相当于对None做索引操作,自然会抛出TypeError: 'NoneType' object is not subscriptable错误。
修复方法

先修正正则规则,适配属性值的双引号格式,同时增加匹配结果的非空判断,确认匹配成功再取值。修正后的代码如下:

import re

with open('fcd.xml', 'r', encoding='utf-8') as f:
    # 修正正则,匹配双引号包裹的speed数值
    pattern = r'speed="([\d.]+)"'
    for line in f:
        match_result = re.search(pattern, line)
        if match_result:
            # 需要做数值计算可以转float,只需要字符串直接取group(1)即可
            speed = float(match_result.group(1))
            print(speed)

如果遇到属性值用单引号、或者等号两边有空格的不规范写法,可以把正则换成兼容性更高的版本:r'speed\s*=\s*["\']([\d.]+)["\']'。
如果要处理的是完全标准的XML文件,更推荐用XML解析库(比如Python自带的xml.etree.ElementTree)做结构化提取,比正则的容错性更强,不会因为标签格式的微小变动匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:15:33