2010-12-19 5 views
2

문자열에서 구두점 문자의 연속 어커런스를 단일 어커런스로 바꿀 수 있기를 원합니다. 예를 들어 :Python에서 RE를 사용하여 반복 문자를 단일 문자로 압축하는 방법은 무엇입니까?

  • 는 "나는 .... 공원에 갔다"=> "나는 공원에 갔다."
  • "심각합니까? !! ??? ???!" => "당신은 심각한가요?!?!"

마음에 와서 가장 먼저하는 일이었다에 :이 반복적 인 프로세스에서 실행하려고하기 때문에 단일이 달성 할 수있는 방법이 있는지

for char in string.punctuation: 
    text = re.sub("\\" + char + "+", char, text) 

그러나, 궁금 해서요 RE, 더 빨리 달릴 수 있습니다. 어떻게 생각해?

+0

감사합니다. 둘 다 훌륭한 빠른 답변이었습니다. 나는 단 하나만 받아 들일 수 있었으므로 구두점을 벗어나는 내 방식을 수정 한 사람을 선택했다. – Alexandros

답변

4

당신이 시도 할 수 :

text = re.sub(r"([" + re.escape(string.punctuation) + r"])\1+", r"\1", text) 

이는 문장 부호 문자가 제대로 필요 탈출되도록 re.escape()를 사용합니다. \1 역 참조는 괄호 () 내의 부분을 말하며 첫 번째 구두점 일치 문자입니다. 따라서 두 개 이상의 반복 구두점 문자의 인스턴스를 동일한 단일 문자로 바꿉니다.

3

re.sub(r'([!?.])\1+', r'\1', text)

관련 문제