[파이썬] 문자열에서 특정문자를 바꾸는 방법

    특정 문자열 변경을 위한 str.replace()

    replace()는 두 개의 매개 변수를 허용하며 첫 번째 매개변수는 바꾸고 싶은 값이며 두 번째 매개변수는 바뀌어질 값이다.

    ex)

    str='hello world!'

    str.replace('hello','hi')

    str => 'hi world!'

    여러 문자 변경을 위한 re.sub(), re.subn()

    python에서는 사용할 수 있는 정규 표현식에 대한 표현식 일치 작업이 많은 re 모듈을 가져올 수 있다.

    re에 있는 두 가지 함수는 sub()과 subn() 함수이다.

    re.sub()의 첫 번째 매개변수는 바꾸고 싶은 값이며 두 번째 매개변수는 바뀌어질 값, 세 번째 입력된 값은 작업할 문자열이다.

    ex)

    import re

    txt= "홍길동, 010-1234-5678, 남성"

    txt=re.sub([0-9],'x',txt)

    txt => "홍길동, xxx-xxxx-xxxx, 남성"

    re.subn()은 re.sub()와 본질적으로는 동일하지만 변환된 문자열의 교체횟수를 반환한다는 점에서 차이가 있다.

    txt, n = re.subn('[0-9]', 'X', txt) 처럼 사용하여 n에 교체횟수가 들어가는 것이다.

     

    문자열 내 문자를 변경하는 translate() 및 maketrans()

    문자 변경은 문자열 변경과 다르게 두 가지 과정이 필요하다.

    먼저 str.maketrans()를 이용하여 바꿀 문자와 새로운 문자 간의 변환 테이블을 만들어야 한다.

    그 후 문자를 변경하고 싶은 문자열을 대상으로 translate 함수를 사용한다.

    ex)

    a = 'hello my name is abcde'

    table=str.maketrans('abcde','12345')  # 1대1 대응으로 변환된다.

    # table=str.maketrans('a':'1','b':'2','c':'3','d':'4','e':'5') 이렇게 쓰는 것도 가능하다

    a=a.translate(table)

    a => 'h5llo my n1m5 is 12345'

     

    사용하다보면 string keys in translate table must be of length1 이라는 에러가 발생할 수 있는데 이는 변경할 문자는 character 형태로 한글자만 가능하기 때문이다. 한글자 이상의 문자를 바꾸고 싶으면 replace를 사용해야한다.

    댓글