我一直在和这个争斗一段时间,我会很感激! 我在将Gcode文件中的某些元素发送到3d打印机之前将其剥离
我的字符串是
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
那么,我如何放弃比赛中的最后一个角色或者更好的方法。
感谢
答案 0 :(得分:2)
您与.*?
模式的匹配方式太多了。匹配只是数字和点:
[Ff][\d.]+
这匹配F
和f
类中的一个字符,后跟\d
加.
类(数字或点)中的一个或多个字符。
演示:
>>> 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|.]
否定字符类模式也会排除|
符号。 否定字符类[^...]
内的所有被排除在外。
答案 1 :(得分:0)
或者你可以使用split:
re.split(r'[^fF\d.][^fF]*', example)