프로그래밍 언어/Python

Python의 문자열에서 특정 문자 제거

Rateye 2021. 11. 12. 11:36
728x90
반응형
질문 : Python의 문자열에서 특정 문자 제거

Python을 사용하여 문자열에서 특정 문자를 제거하려고합니다. 이것이 제가 지금 사용하고있는 코드입니다. 불행히도 그것은 문자열에 아무것도하지 않는 것처럼 보입니다.

for char in line:
    if char in " ?.!/;:":
        line.replace(char,'')

이 작업을 올바르게 수행하려면 어떻게해야합니까?

답변

Python의 문자열은 변경할 수 없습니다 (변경할 수 없음). line.replace(...) 의 효과는 이전 문자열을 변경하는 대신 새 문자열을 만드는 것입니다. 해당 문자가 제거 된 상태에서 해당 변수가 새 값을 갖도록 line 에 리 바인드 (할당)해야합니다.

또한, 당신이하는 방식은 상대적으로 느릴 것입니다. 또한 이중 중첩 구조를보고 더 복잡한 일이 진행되고 있다고 잠시 생각하는 숙련 된 비단뱀가들에게는 약간 혼란 스러울 것입니다.

Python 2.6 및 최신 Python 2.x 버전 * str.translate 대신 str.translate를 사용할 수 있습니다 ( 아래 Python 3 답변 참조 ).

line = line.translate(None, '!@#$')

re.sub 정규 표현식 대체

import re
line = re.sub('[!@#$]', '', line)

대괄호로 묶인 문자는 문자 클래스를 구성합니다. line 모든 문자는 sub : 빈 문자열에 대한 두 번째 매개 변수로 대체됩니다.

파이썬 3 답안

Python 3에서 문자열은 유니 코드입니다. 조금 다르게 번역해야합니다. kevpie는 답변 중 하나 에 대한 주석 str.translate 에 대한 문서에 언급되어 있습니다.

translate 메서드를 호출 할 때 위에서 사용한 두 번째 매개 변수를 전달할 수 없습니다. 첫 번째 매개 변수로 None 을 전달할 수도 없습니다. 대신 번역 테이블 (일반적으로 사전)을 유일한 매개 변수로 전달합니다. 이 테이블 은 문자의 서수 값 (즉, ord 를 호출 한 결과)을 대체해야하는 문자의 서수 값에 매핑하거나 삭제해야 함을 나타 내기 위해 None

따라서 유니 코드 문자열로 위의 춤을 추려면 다음과 같이 호출합니다.

translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)

dict.fromkeysmap 은 다음을 포함하는 사전을 간결하게 생성하는 데 사용됩니다.

{ord('!'): None, ord('@'): None, ...}

다른 답변 에서 알 수 있듯이 더 간단하게 번역 테이블을 만듭니다.

unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})

또는 Joseph Lee가 가져온 것처럼 str.maketrans 사용하여 동일한 번역 테이블을 만듭니다.

unicode_line = unicode_line.translate(str.maketrans('', '', '!@#$'))

None 대신 전달할 "null"변환 테이블을 만들 수 있습니다.

import string
line = line.translate(string.maketrans('', ''), '!@#$')

여기서 string.maketrans 는 서수 값이 0에서 255까지 인 문자를 포함하는 문자열 인 변환 테이블 을 만드는 데 사용됩니다.

출처 : https://stackoverflow.com/questions/3939361/remove-specific-characters-from-a-string-in-python
728x90
반응형