source

Python에서 다중 공백을 단일 공백으로 대체

gigabyte 2022. 9. 12. 11:42
반응형

Python에서 다중 공백을 단일 공백으로 대체

다음과 같은 문자열이 있습니다.

mystring = 'Here is  some   text   I      wrote   '

이중, 삼중(...) 공백 체커를 단일 공백으로 대체하여 다음을 얻으려면 어떻게 해야 합니다.

mystring = 'Here is some text I wrote'

간단한 가능성(RE를 피하고 싶은 경우)은 다음과 같습니다.

' '.join(mystring.split())

분할과 결합은 명시적으로 요구하는 작업을 수행합니다.또한 이 작업은 사용자가 언급하지 않는 추가 작업도 수행합니다.또한 예에서는 후행 공백을 제거합니다.

정규식을 사용하면 조합된 공백 문자를 보다 효과적으로 제어할 수 있습니다.

유니코드 공백을 일치시키려면:

import re

_RE_COMBINE_WHITESPACE = re.compile(r"\s+")

my_str = _RE_COMBINE_WHITESPACE.sub(" ", my_str).strip()

ASCII 공백만 일치시키려면:

import re

_RE_COMBINE_WHITESPACE = re.compile(r"(?a:\s+)")
_RE_STRIP_WHITESPACE = re.compile(r"(?a:^\s+|\s+$)")

my_str = _RE_COMBINE_WHITESPACE.sub(" ", my_str)
my_str = _RE_STRIP_WHITESPACE.sub("", my_str)

제어 문자(x0b, x0c, x1c, x1d, x1e, x1f 등)를 유지하기 위해서는 ASCII 공백만 일치시키는 것이 필요할 수 있습니다.

레퍼런스:

개요:

Unicode(str) 패턴의 경우: Unicode 공백 문자([\t\n\r\f\v] 및 여러 언어의 타이포그래피 규칙에 의해 필수화된 공백 등)와 일치합니다.ASCII 플래그를 사용하는 경우 [\t\n\r\f\v]만 일치합니다.

개요:

\w, \W, \b, \B, \d, \D, \s 및 \S를 완전한 Unicode 매칭이 아닌 ASCII만의 매칭을 실행하도록 합니다.이는 Unicode 패턴에서만 의미가 있으며 바이트 패턴에서는 무시됩니다.인라인 플래그(?a)에 대응합니다.

strip()는 선행 및 후행 화이트스페이스를 모두 리모트 합니다.

완성도를 높이기 위해 다음 항목도 사용할 수 있습니다.

mystring = mystring.strip()  # the while loop will leave a trailing space, 
                  # so the trailing whitespace must be dealt with
                  # before or after the while loop
while '  ' in mystring:
    mystring = mystring.replace('  ', ' ')

비교적 빈칸이 적은 스트링에서는 빠르게 동작합니다(스페이스는re(이러한 상황에서는)

어떤 시나리오에서도 Alex Martelli의 스플릿/조인 솔루션은 적어도 같은 속도로(보통 훨씬 더 빠르게) 동작합니다.

이 예에서는 기본값 timit을 사용합니다.Timer.repeat()는 다음과 같은 회수를 수신합니다.

str.replace: [1.4317800167340238, 1.4174888149192384, 1.4163512401715934]
re.sub:      [3.741931446594549,  3.8389395858970374, 3.973777672860706]
split/join:  [0.6530919432498195, 0.6252146571700905, 0.6346594329726258]


편집:

방금 게시물을 발견했는데, 이 게시물은 이 방법들의 속도를 상당히 길게 비교한 것입니다.

언급URL : https://stackoverflow.com/questions/2077897/substitute-multiple-whitespace-with-single-whitespace-in-python

반응형