2017-09-11 4 views
3

특정 표시로 문장의 모양을 바꾸고 싶습니다."..."과 "."을 구분하는 방법 Python으로

sentence = "This is... a test." 
reshaped_sentence = "This is ... a test ." 

내가() 함수를 대체 사용이하려면 : 더 정확하게, 나는 다음을 수행하고자하는

sentence.replace("...", " ... ").replace(".", " . ") 

을하지만 난 다음 얻을 : 정말

reshaped_sentence = "This is . . . a test ." 

I 구별 할 필요가있다. 내 문장에서, 그래서 어떤 생각이 문제를 해결하는 방법?

+0

분명히 두 번째 교체는 첫 번째 –

+0

에 영향을 미칩니다. 아래의 Wictor의 대답은 1 또는 3 개의 마침표가 필요한만큼 수행합니다. [유니 코드 ellipses] (http://www.charbase.com/2026-unicode-horizontal-ellipsis)를 다룰 필요가 없습니까? – Jedi

+0

@ 제다이 유니 코드 타원에 대해서는 신경 쓰지 않지만 감사합니다. – Julian

답변

1

정규식을 사용하여 3 개의 연속 점 또는 0 개 이상의 공백 문자로 묶인 단일 점을 일치시키고 공백으로 묶은 일치 값으로 대체 할 수 있습니다. 뒤 또는 초기 공백을 제거하려면 strip()으로 전화하십시오. - 제로 이상의 공백

  • (\.{3}|\.) - 그룹 1 (대체 패턴으로부터 \1로 칭함) \s*(\.{3}|\.)\s* 일치

    • \s* 여기서

      import re 
      rx = r"\s*(\.{3}|\.)\s*" 
      s = "This is... a test." 
      print(re.sub(rx, r" \1 ", s).strip()) 
      # => This is ... a test . 
      

      :

      Python demo보기

      • \.{3}-3 점
      • | - 또는
      • \.-
    • \s* 하나의 점 - 0 개 이상의 공백

    regex demo를 참조하십시오.

  • +0

    좋아요! 고맙습니다. 작동하는 것 같습니다. 이제 "..."을 처리하고 "."을 제거하기 만하면 어떻게 될 수 있습니까? 내 문장은 다음과 같습니다. s = "이것은 테스트입니다." – Julian

    +1

    @Julian Python 2.x를 사용하고 있으므로 대체에 람다식이 필요합니다. x.group (1) else "", s) .strip()'] (https : //) 경우''re.sub (rx, lambda x : r "{}". ideock.com/tjedvJ) –

    +1

    이것은 단지 완벽합니다. 설명의 명료성에 대해 감사드립니다. – Julian

    관련 문제