如何用正则表达式拆分提取CAT对应的数值与误差值?
原有代码失效原因
- 变量名不匹配:代码中定义的测试文本变量为
test,但正则匹配时传入的是未定义的text变量,运行时会直接抛出变量不存在的报错 - 数字匹配规则错误:正则内代表数字的
\d漏写了反斜杠,写成了普通字符d,完全无法识别数字内容;同时把数字拆成零散的单字符匹配,对整数、不同长度的小数兼容极差 - 分隔符匹配逻辑错误:把
±和+/-写在单字符匹配的[]组里,会把+、-、/当成独立单字符匹配,识别不了完整的+/-分隔符 - 结果处理逻辑错误:通过
''.join把所有匹配到的长文本拼接后再拆分,会把多组匹配的数值完全混合,无法区分每一组对应的均值和误差值
修正后的可运行实现
匹配逻辑做了三点核心优化:
- 采用通用数值匹配规则
\d+(?:\.\d+)?,可同时覆盖整数、任意长度小数,不需要写死小数位数量 - 用非捕获组
(?:±|\+/-)匹配两种格式的分隔符,兼容分隔符前后任意数量的空格 - 用两个捕获组直接提取每一组匹配里的两个目标数值,从根源上避免多组内容混淆
完整可运行代码:
import re test_text = "CAT 13.589 ± 24.5 CAT 55 +/- 24" match_pattern = r'CAT\s+(\d+(?:\.\d+)?)\s*(?:±|\+/-)\s*(\d+(?:\.\d+)?)' extracted = re.findall(match_pattern, test_text) # 按要求格式输出 for v1, v2 in extracted: print(f"{v1} {v2}")
运行后输出完全符合预期:
13.589 24.5 55 24
如果需要保留原文本中数值和分隔符之间的多空格间隔,只需在打印时调整输出的空格数即可,不影响核心匹配逻辑。
内容的提问来源于stack exchange,提问作者Gayathri Kumar
相关产品推荐
相关产品推荐

