2014-02-24 5 views
1

나는 내용이 꽤 다음과 같이 텍스트 파일을정확하게

G12

G10,11

GO12

GO10,12

내가 하려고하는 것은 모든 'G'를 ''로 대체하지만 'GO'를 'O'로 바꾸지 않는 것입니다.

내가 그렇게 처음에는 쉼표없이 라인을 처리하고, 정규 표현식을하려고했다

with open(file) as f: 
for line in f: 
if re.match(r"%s[0-9]+" % 'G', line): 
    input = line.strip('G') 

그리고 그것은 "G10,11 \ n은"문자열이 정규식 패턴과 일치하는 것을 밝혀 어느 쪽이 나를 혼란스럽게 만듭니다.

내 진술에 문제가 있습니까? 아니면이를 수행하는 더 간단한 방법이 있습니까? 많은 감사합니다.

+0

'r "% s [0-9] +"% 'G''은 항상 정규 표현식으로 사용되는''G [0-9] +''문자열을 생성합니다. – poke

+0

제안 해 주셔서 감사합니다. – Floyd

답변

4

여기에는 몇 가지 대안이 있습니다. 요구 사항을 직접 번역하면 G(?!O)이되며 빈 문자열로 대체 할 수 있습니다. 어느과 같이 할 수있다 :

line = re.sub(r"G(?!O)", "", line) 

G는 다음과 같은 문자가 O없는 경우에만 G, (?!O) 일치 일치합니다.

대신 G와 일치하는 숫자를 사용하려면 G(?=\d)을 사용할 수 있습니다.

+0

고마워,하지만 난 아직도 궁금해, 왜 내 정규식 연구 "% s [0-9] +"쉼표로 라인을 일치하는, 나는 생각 만 r "% s [0-9] +, [0-9 ] + "는 G10,11과 같은 줄과 일치합니다. – Floyd

+1

@Floyd're.match'의 결과를 저장하고 일치하는 것을 보았을 때'G10,11'의'G10'과 일치한다는 것을 알 수 있습니다. 그러나 당신은 "이 일치하거나하지 않습니다"를 확인한 다음 그 자체로 처리 할 수 ​​있습니다. 그래서'G10'은'G10,11'과 일치하지만'G10,11'에 다시 작업하고 있습니다. 그래서 당신도 그 부분을 보았습니다. – poke

+0

@poke 감사합니다! 귀하의 설명을 이해하는 것 같아요,하지만 내가 잘못이 일치하지 않도록 정규식을 작성할 수 있습니까? – Floyd