如何从无空格的CNC数控文件行中提取X/Y/Z后的双精度数值?
提取CNC坐标的高效方案
别用遍历字符加一堆if的笨办法,直接上正则表达式就行,完美适配你说的各种情况。
核心正则式:
([XYZ])([-+]?\d+\.\d+)
拆解下:([XYZ]):匹配X/Y/Z任意一个,捕获为坐标标识([-+]?\d+\.\d+):匹配带正负号的双精度数值,支持正号、负号或者无符号,必须带小数点(匹配你示例里的格式)
如果你的数值可能出现整数形式(比如X5),可以把正则调整为([XYZ])([-+]?\d+(\.\d+)?)
处理逻辑:
- 逐行读取CNC的txt文件
- 对每一行用上述正则做全局匹配,拿到所有符合
X/Y/Z+数值的组合 - 把匹配结果整理成键值对,比如
{"X": 3.6849, "Y": 0.9048, "Z": -0.1656},没有的坐标不会出现在结果里
举个Python代码示例:
import re # 预编译正则,提升匹配效率 pattern = re.compile(r'([XYZ])([-+]?\d+\.\d+)') # 测试示例行 line = "N0310X3.6849Y0.9048Z-0.1656" matches = pattern.findall(line) coords = {} for axis, value in matches: coords[axis] = float(value) print(coords) # 输出: {'X': 3.6849, 'Y': 0.9048, 'Z': -0.1656}
- 适配各种边界情况:
- 仅含X的行:
N0050X2.1234→ 提取到{'X': 2.1234} - 仅含Y和Z的行:
N0100Y-0.5Z10.0001→ 提取到{'Y': -0.5, 'Z': 10.0001} - 无坐标的行:
N0000G01→ 匹配结果为空,返回空字典
- 仅含X的行:
这种方法比遍历字符简洁太多,后续要调整匹配规则(比如支持整数、新增其他轴),改正则就行,不用改一堆if判断。
内容的提问来源于stack exchange,提问作者Porton_
相关产品推荐
相关产品推荐

