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

Python字符串提取:正则匹配失败报AttributeError错误求助

问题解决:提取表格字符串指定内容并修复正则匹配错误

需求说明

原始表格格式字符串:

2555    texttext    0   100 100 0   0   0   0   lowness 0
    2557    texttext    10  650 660 0   0   0   0   lowness 0
    2564    texttext    0   30  30  0   0   0   0   lowness 0
    2566    texttext    0   0   0   0   0   0   0   lowness 0
    2567    texttext    10  70  80  0   0   0   0   lowness 0

需要提取每行的texttext、其后两个数字,以及lowness,输出格式:

texttext    0   100 lowness
    texttext    10  650 lowness
    texttext    0   30  lowness
    texttext    0   0   lowness
    texttext    10  70  lowness

原代码错误分析

你写的正则表达式逻辑混乱,无法匹配目标行结构,导致re.match返回None,调用group()时触发AttributeError。比如开头的(^\D\d*\D)完全不符合行首空格加数字的格式,分组也没有准确对应需要提取的内容。

修正方案

方案1:简化正则匹配

调整正则表达式,精准匹配需要提取的字段:

import re

text = """
    2555    texttext    0   100 100 0   0   0   0   lowness 0
    2557    texttext    10  650 660 0   0   0   0   lowness 0
    2564    texttext    0   30  30  0   0   0   0   lowness 0
    2566    texttext    0   0   0   0   0   0   0   lowness 0
    2567    texttext    10  70  80  0   0   0   0   lowness 0
"""

for line in text.split('\n'):
    line = line.strip()
    if not line:
        continue
    # 正则匹配:行首空格+数字,然后提取目标字段
    match = re.match(r'\s*\d+\s+(\w+)\s+(\d+)\s+(\d+)\s+.+?(\w+)\s+\d+$', line)
    if match:
        # 按格式输出提取的内容,保留开头空格对齐
        print(f'    {match.group(1)}    {match.group(2)}   {match.group(3)} {match.group(4)}')

方案2:用字符串分割(更简单直观)

因为每行是空格分隔的固定结构,直接分割后取对应索引的元素:

text = """
    2555    texttext    0   100 100 0   0   0   0   lowness 0
    2557    texttext    10  650 660 0   0   0   0   lowness 0
    2564    texttext    0   30  30  0   0   0   0   lowness 0
    2566    texttext    0   0   0   0   0   0   0   lowness 0
    2567    texttext    10  70  80  0   0   0   0   lowness 0
"""

for line in text.split('\n'):
    parts = line.split()
    if len(parts) < 10:
        continue
    # 提取对应位置的元素:parts[1]是texttext,parts[2]/3是其后两个数字,parts[9]是lowness
    print(f'    {parts[1]}    {parts[2]}   {parts[3]} {parts[9]}')

两种方案都能输出符合要求的结果,方案2无需正则,更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:21