0

我已经为此奋斗了一段时间,希望能给点小费!在将 Gcode 文件发送到 3d 打印机之前,我从 Gcode 文件中剥离了某些元素

我的字符串是

f100G00X345.234Y234F345.5623I-2344.234J234.234F544

或类似的,我观察匹配(以删除)字母“F|f”后跟数字(浮点数)的元素,在上面的字符串中,这些元素是:

f100 - F345.5623 - F544

到目前为止,我非常接近的正则表达式是

(F|f).*?([^0-9|.]|\Z)

http://rubular.com/r/4GFziqlcR6

我认为(不确定)找到了 F 字母,并抓住了数字或点或刺尾的所有内容。但是这也包括最后一个字符和上面的匹配项

f100G - F345.5623I - F544

那么,我该如何放弃匹配中的最后一个字符,或者什么是更好的方法。

谢谢

4

2 回答 2

2

您与模式匹配得太多了.*?匹配数字和点:

[Ff][\d.]+

这匹配Fand类中的一个字符f,后跟\dplus.类中的一个或多个字符(数字或点)。

演示:

>>> import re
>>> example = 'f100G00X345.234Y234F345.5623I-2344.234J234.234F544'
>>> re.findall(r'[Ff][\d.]+', example)
['f100', 'F345.5623', 'F544']
>>> re.sub(r'[Ff][\d.]+', '', example)
'G00X345.234Y234I-2344.234J234.234'

请注意,您的[^0-9|.]否定字符类模式也排除了该|符号。否定字符类中的所有内容都被排除在外。[^...]

于 2013-07-15T10:18:36.197 回答
0

或者您可以使用拆分:

re.split(r'[^fF\d.][^fF]*', example)
于 2013-07-15T10:32:55.423 回答