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
相关产品推荐
相关产品推荐

