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

3D打印Gcode解析:Python正则匹配含/不含F参数的挤出行及参数提取

解析3D打印Gcode挤出动作的正则方案

匹配带/不带F参数的挤出行

针对Gcode中G1指令的挤出动作(必须包含E参数,X/Y/F可选),可以用这个正则表达式一次性覆盖两种场景:

^G1\s+(?:X[+-]?\d+(?:\.\d+)?\s+)?(?:Y[+-]?\d+(?:\.\d+)?\s+)?E[+-]?\d+(?:\.\d+)?\s*(?:F[+-]?\d+(?:\.\d+)?\s*)?$

正则拆解

  • ^G1\s+:锁定行首的G1直线移动指令,允许后续空白字符
  • (?:X[+-]?\d+(?:\.\d+)?\s+)?:可选的X参数,支持正负整数/浮点数,用非捕获组避免额外分组干扰
  • (?:Y[+-]?\d+(?:\.\d+)?\s+)?:同理,可选的Y参数
  • E[+-]?\d+(?:\.\d+)?:必须存在的E挤出量参数,支持正负值(回退动作也属于挤出相关逻辑)
  • \s*(?:F[+-]?\d+(?:\.\d+)?\s*)?$:可选的F进给速度参数,前后允许空白,匹配到行尾

这个正则能覆盖的典型行示例:

  • 带F的完整挤出:G1 X10.5 Y-5 E2.3 F1200
  • 不带F的挤出:G1 X-3 E1.8
  • 仅E和F的动作:G1 E0.5 F900

提取X参数的数值

如果要单独提取X的数值,只需把X参数的数值部分改成捕获组,调整后的正则:

^G1\s+(?:X([+-]?\d+(?:\.\d+)?)\s+)?(?:Y[+-]?\d+(?:\.\d+)?\s+)?E[+-]?\d+(?:\.\d+)?\s*(?:F[+-]?\d+(?:\.\d+)?\s*)?$

以Python为例,提取逻辑如下:

import re

# 示例Gcode行
gcode_line = "G1 X15.2 Y7 E3.1 F1500"
# 带捕获组的正则
pattern = r"^G1\s+(?:X([+-]?\d+(?:\.\d+)?)\s+)?(?:Y[+-]?\d+(?:\.\d+)?\s+)?E[+-]?\d+(?:\.\d+)?\s*(?:F[+-]?\d+(?:\.\d+)?\s*)?$"

match_result = re.match(pattern, gcode_line)
if match_result:
    x_num_str = match_result.group(1)
    if x_num_str:  # 判断X参数是否存在
        x_value = float(x_num_str)
        print(f"提取到X参数值:{x_value}")

额外优化:兼容注释行

如果你的Gcode行末尾带有注释(以;开头),可以在正则末尾加上(?:;.*)?来忽略注释内容:

^G1\s+(?:X([+-]?\d+(?:\.\d+)?)\s+)?(?:Y[+-]?\d+(?:\.\d+)?\s+)?E[+-]?\d+(?:\.\d+)?\s*(?:F[+-]?\d+(?:\.\d+)?\s*)?(?:;.*)?$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:04:56