질문 : 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.fromkeys
및 map
은 다음을 포함하는 사전을 간결하게 생성하는 데 사용됩니다.
{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
'프로그래밍 언어 > Python' 카테고리의 다른 글
pip의 캐시를 제거 하는 방법 (0) | 2021.11.12 |
---|---|
Python의 mkdir -p 기능 (0) | 2021.11.12 |
Python에서 현재 스크립트 이름 가져 오기 (0) | 2021.11.11 |
파이썬에서 존재하지 않을 수 있는 파일을 삭제하는 가장 좋은 방법 (0) | 2021.11.10 |
파이썬에서 숫자를 반올림하는 방법 (0) | 2021.11.10 |