2012-11-13 4 views
5

Python regexp를 사용하여 LaTeX 파일의 주석을 제거하고 싶습니다. LaTeX에서 코멘트는 "%"로 시작합니다. 그러나 % 문자가 이스케이프 된 경우 ("\ %") 주석이 아닌 경우 기호 퍼센트입니다.파이썬 정규 표현식 ('백 슬래시가 아님'문자 집합을 지정하는 방법)의 문자 집합에서 백 슬래시를 사용 하시겠습니까?

이 작업은 하나의 내 LaTeX의 텍스트에 적용 많은 정규 표현식 중 하나입니다. 나는이 모든 reg exp를 dicts 목록에 저장합니다.

내가 직면 문제는 (내가 '하지 백 슬래시'문자 집합을 지정하는 방법을 모르기 때문에) 내가 코멘트를 치기에 사용하는 정규 표현식이 작동하지 않습니다. 문자 집합의 백 슬래시가 닫는 ']'을 이스케이프 처리하고 regexp가 올바르지 않습니다.

내 코드 : 어떤 도움이 많이 이해할 수있을 것이다

regexps=[] 
regexps.append({r'left':'%.*', 'right':r''}) # this strips all the comments, but messes up with the percent characters (\%) 
regexps.append({r'left':'[^\]%.*', 'right':r''}) # this is incorrect (escapes the closing "]") 
return applyRegexps(latexText, regexps) 


def applyRegexps(text, listRegExp): 
    """ Applies successively many regexps to a text""" 
    if testMode: 
     print str(listRegExp) 
    # apply all the regexps in the list 
    for element in listRegExp: 
     left = element['left'] 
     right = element['right'] 
     r=re.compile(left) 
     text=r.sub(right,text) 
    return text 

. 감사!

+0

이나요 '[^ \\]'? 은'\\는'당신이 정규식에 리터럴 백 슬래시를 넣어하려면 백 슬래시 – Bakuriu

+0

를 탈출하기위한 정규식 구문은, 그것을 두 배로해야합니다. 귀하의 후식은 '[^ \\] %. *'이어야합니다. –

+0

Martins Pieters가 답변을드립니다. 실제로, 그러나 영업 이익은 너무 키에 대한 원시 문자열을했다 .. : 나는 피곤해야합니다 ... '왼쪽'에 대한 – user1821466

답변

5

간단히 백 슬래시를 두 배로, 그러나 다시을 두 배로 것을 피하기 위해 문자 그대로의 원시 문자열을 사용하십시오

regexps.append({'left':r'[^\\]%.*', 'right':r''}) 
+1

원시 문자열은 ... l4mpi @ – l4mpi

+0

불필요한입니다 –

1

마티 피에 터스의 대답은 당신이 부탁 하나이지만, I 이것이 당신이 정말로 찾고있는 것인지 확신 할 수 없습니다. 예를 들어이 패턴은 문자열의 첫 번째 문자로 %과 일치하지 않습니다 (앞에 백 슬래시 문자가 없으므로). (포함

  • [^\\]%가 아닌 백 슬래시 문자 앞에 오는 % 일치 :

    r'(?<!\\)%.*' 
    

    의 차이는 이것이다 : 당신이 실제로 원하는 것은 아마 부정적 예측 (여전히 백 슬래시를 이스케이프해야합니다)입니다 경기의 해당 문자)

  • (?<!\\)%이 경기를 포함하지 않고 (백 슬래시 문자가 선행되지 않는 % 일치)

후자는 문자열의 시작 부분에 %에 대해서도 마찬가지입니다. 당신은`R을 사용하려고

관련 문제