2013-07-15 1 views
0

Ive는 잠시 동안이 문제와 싸워 왔으며 팁을 주셔서 감사합니다! 나는 3D 프린터로 전송하기 전에 Gcode 파일에서 특정 요소를 제거하고 있습니다파이썬 정규식 - 일부 Gcode 청소

내 문자열은 유사한

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

또는 내가 (제거 할 목적으로) 요소에 맞게 볼 곳 편지 |이 위의 문자열에 숫자 (부동) 뒤에 'F F'는 다음과 같습니다 IS

(F|f).*?([^0-9|.]|\Z) 
매우 가까운 SOFAR입니다

f100 - F345.5623 - F544 

내 정규식 내가 생각

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

는 (확실하지 않음) F 문자를 발견하고, 번호 또는 점이나 고통의 끝 하나가 모든 것을 움켜 잡는다. 하지만이 또한 마지막 문자를 포함하고 고통에 위 그래서

f100G - F345.5623I - F544 

일치, 나도 마지막 문자가 일치를 형성 도랑 못하거나 무엇을 더 나은 방법이 될 것입니다 방법에 대해 설명합니다.

감사

답변

2

당신은 .*? 패턴으로 너무 많은 방법을 일치합니다. 경기 단지 숫자와 점 :이 \d 플러스 . 클래스 (숫자 또는 점)에 하나 개 이상의 문자 다음에 Ff의 클래스에서 하나 개의 문자와 일치

[Ff][\d.]+ 

.

데모 : 당신의 [^0-9|.] 부정 문자 클래스 패턴도 | 기호를 제외

>>> 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

우수한! 고맙습니다 –

0

또는 분할 사용할 수 있습니다

re.split(r'[^fF\d.][^fF]*', example)