programing

문자열에서 모든 공백을 제거하는 방법

projobs 2022. 10. 11. 21:49
반응형

문자열에서 모든 공백을 제거하는 방법

python 문자열의 모든 공간을 제거하려면 어떻게 해야 합니까?예를 들어, 나는 다음과 같은 끈을 원한다.strip my spacesstripmyspaces 나는 할 수 것 않다.strip():

>>> 'strip my spaces'.strip()
'strip my spaces'

sep 매개 변수 없이 str.split의 동작을 활용:

>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'

모든 공백 대신 공백만 제거하는 경우:

>>> s.replace(" ", "")
'\tfoo\nbar'

시기상조 최적화

효율이 주요 목표는 아니지만, 코드 작성이 주요 목표입니다. 초기 일정은 다음과 같습니다.

$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop

regex는 캐시되어 있기 때문에 생각만큼 느리지 않습니다.사전에 컴파일 하는 것도 도움이 되지만, 실제로는 여러 번 전화를 걸었을 경우에만 문제가 됩니다.

$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop

re.sub은 11.3배 느리지만 병목현상은 확실히 다른 곳에 있습니다.대부분의 프로그램은 이 세 가지 선택지의 차이를 인식하지 못합니다.

Python 3의 경우:

>>> import re
>>> re.sub(r'\s+', '', 'strip my \n\t\r ASCII and \u00A0 \u2003 Unicode spaces')
'stripmyASCIIandUnicodespaces'
>>> # Or, depending on the situation:
>>> re.sub(r'(\s|\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFF)+', '', \
... '\uFEFF\t\t\t strip all \u000A kinds of \u200B whitespace \n')
'stripallkindsofwhitespace'

생각지도 못한 공백 문자를 사용할 수 있습니다.믿을 수 있습니다.

\s 자체로는 항상 ASCII pacepace の : 、 ASCII の on on on 。

  • (정규) 공간
  • 새 행(\n)
  • 캐리지 리턴(\r)
  • 형틀 피드
  • 세로 탭

기타:

  • 의 †re.UNICODE 디세이블,
  • Python 3의 경우 추가 작업이 필요 없습니다.

\s는 Unicode 공백 문자도 나타냅니다.하다

  • 깨지지 않는 공간,
  • em 공간,
  • 표의 공간,

...etc. "White_Space 속성을 가진 유니코드 문자"의 전체 목록을 참조하십시오.

, <고객명>님\s공백으로 분류되지 않은 문자는 포함되지 않습니다.이 문자는 다음과 같이 사실상 공백입니다.

  • 제로폭 조이너,
  • 몽골어 모음 분리자,
  • 0 폭의 중단 없는 공간(바이트 순서 표시),

...등. "White_Space 속성 없는 관련 유니코드 문자"의 전체 목록을 참조하십시오.

이 6글자는 두 됩니다.\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFF.

출처:

또,

"strip my spaces".translate( None, string.whitespace )

다음은 Python3 버전입니다.

"strip my spaces".translate(str.maketrans('', '', string.whitespace))

가장 간단한 방법은 replace를 사용하는 것입니다.

"foo bar\t".replace(" ", "").replace("\t", "")

또는 정규 표현을 사용합니다.

import re
re.sub(r"\s", "", "foo bar\t")

Python에서 시작 공간 제거

string1 = "    This is Test String to strip leading space"
print(string1)
print(string1.lstrip())

Python에서 후행 또는 끝 공간 제거

string2 = "This is Test String to strip trailing space     "
print(string2)
print(string2.rstrip())

Python에서 문자열 시작과 끝의 whiteSpaces를 제거합니다.

string3 = "    This is Test String to strip leading and trailing space      "
print(string3)
print(string3.strip())

python의 모든 공백 제거

string4 = "   This is Test String to test all the spaces        "
print(string4)
print(string4.replace(" ", ""))

Roger Pate가 언급한 바와 같이 다음 코드가 나에게 효과가 있었습니다.

s = " \t foo \n bar "
"".join(s.split())
'foobar'

Jupyter Notebook을 사용하여 다음 코드를 실행하고 있습니다.

i=0
ProductList=[]
while i < len(new_list): 
   temp=''                            # new_list[i]=temp=' Plain   Utthapam  '
   #temp=new_list[i].strip()          #if we want o/p as: 'Plain Utthapam'
   temp="".join(new_list[i].split())  #o/p: 'PlainUtthapam' 
   temp=temp.upper()                  #o/p:'PLAINUTTHAPAM' 
   ProductList.append(temp)
   i=i+2

해서 을 사용해 보세요.re.sub모든 공백을 검색하여 빈 문자열로 바꿀 수 있습니다.

\s패턴 내에서는 공백 문자(예: 공백, 줄바꿈 등)와 일치합니다.자세한 내용은 매뉴얼을 참조하십시오.

import re
re.sub(' ','','strip my spaces')

위한 이러한 은 '필터링'처럼.split/join ★★★★★★★★★★★★★★★★★」translate★★★★★★★★★★★★★★★★★★.

화이트 스페이스 세트가 필요합니다.

>>> import string
>>> ws = set(string.whitespace)

filter★★★★

>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'

목록 이해(예, 괄호 사용: 아래 벤치마크 참조):

>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'

A:

>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'

벤치마크:

>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025

>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995
  1. 단어를 구분하기 위해 끈을 풀어라.
  2. 양쪽의 공백을 제거합니다.
  3. 최종적으로는 1개의 스페이스로 접속

코드의 마지막 줄:

' '.join(word.strip() for word in message_text.split()

최적의 퍼포먼스가 요건이 아니라 단순한 것을 원하는 경우 문자열 클래스의 빌트인 "isspace" 메서드를 사용하여 각 문자를 테스트하는 기본 함수를 정의할 수 있습니다.

def remove_space(input_string):
    no_white_space = ''
    for c in input_string:
        if not c.isspace():
            no_white_space += c
    return no_white_space

「 」의 no_white_space이 방법으로는 이상적인 성능을 얻을 수 없지만 솔루션은 이해하기 쉽습니다.

>>> remove_space('strip my spaces')
'stripmyspaces'

함수를 정의하고 싶지 않은 경우 목록 이해와 약간 유사한 것으로 변환할 수 있습니다. ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★join★★★★★★★★★★★★★★★★★★:

>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'

TL/DR

이 솔루션은 Python 3.6을 사용하여 테스트되었습니다.

Python3에서 문자열에서 모든 공백을 제거하려면 다음 함수를 사용할 수 있습니다.

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

공백 문자('\t\n\r\x0b\x0c')를 삭제하려면 다음 함수를 사용합니다.

import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

설명.

이 python python str.translatemethod는 str의 임베디드 클래스 메서드로, 테이블을 가져와 전달된 변환 테이블을 통해 매핑된 각 문자와 함께 문자열 복사본을 반환합니다.str.translate에 관한 완전한 문서

str.maketrans 하나의 수업 입니다.str여기에서는 1개의 파라미터(이 경우 딕셔너리)에만 사용합니다.여기서 키는 문자 치환값과 함께 값에 매핑된 문자입니다.을 반환하여 에 할 수 .str.translatestr.maketrans 전체 문서

stringpython의 module에는 몇 가지 일반적인 문자열 연산과 상수가 포함되어 있습니다. string.whitespace는 공백으로 간주되는 모든 ASCII 문자를 포함하는 문자열을 반환하는 상수입니다.여기에는 문자 공간, 탭, 줄 바꿈, 반환, 폼 피드 및 수직 탭이 포함됩니다.문자열에 대한 전체 문서

두 번째 기능에서는dict.fromkeys사전 작성에 사용됩니다.여기서 키는 에 의해 반환되는 문자열 내의 문자입니다.string.whitespace '값'을 가진None. dict.fromkeys 전체 문서

다음은 플레인오래된 목록 이해를 사용하는 다른 방법입니다.

''.join([c for c in aString if c not in [' ','\t','\n']])

예:

>>> aStr = 'aaa\nbbb\t\t\tccc  '
>>> print(aString)
aaa
bbb         ccc

>>> ''.join([c for c in aString if c not in [' ','\t','\n']])
'aaabbbccc'

언급URL : https://stackoverflow.com/questions/3739909/how-to-strip-all-whitespace-from-string

반응형