본문 바로가기

Dev/PYTHON 파이썬

[python] 문자열에서 여러 문자 바꾸기 | 문자열 치환 | replace | transmake | translate | 정규표현식 | sub | re

728x90
반응형

프로그래머스에서 알고리즘 문제를 풀다보니까

문자열에서 특정 문자를 추출/치환해야 하는 경우가 많이 생긴다

 

생각보다 용도와 상황에 맞게 여러 개를 알아두는게 좋을 것 같다

 

물론 구글링해보면 잘 정리해둔 포스팅이 많이 나오지만,

내가 직접 정리하는게 가장 기억에 잘 남을 것 같아서 이렇게 포스팅하게 되었다

 

1. replace

  • replace 함수는 문자열 변수에 .을 찍고 replace를 써줌으로써 사용할 수 있다
  • 괄호 안에는 매개변수를 넣는데
    - 첫 번째 매개변수: 어떤 문자열을 바꿀 것인가?
    - 두 번째 매개변수: 어떤 문자열로 바꿀 것인가?
    - 세 번째 매개변수: 몇 번 바꿀것인가?
  • 더 자세한 사용 방법은 공식 문서를 참고하면 좋다
# ex-1 : replace의 기본적인 사용 형태
# hello를 bye로 바꾸는 예제
a = 'hello world'
a = a.replace('hello', 'bye')
print(a) # bye world
# ex-2
# replace는 등장하는 모든 지정 문자열을 치환한다
a = 'hello world'
a = a.replace('l', '*')
print(a) # he**o world
# ex-3
# replace가 수행할 치환 횟수를 지정할수도 있다
a = 'hello world'
a = a.replace('l', '*', 1)
print(a) # he*lo world

 

2. maketrans / translate

  • 위의 replace 함수는 한 종류의 문자열을 다른 한 종류로 바꾸는 역할밖에 하지 못한다
  • 따라서 여러 종류의 문자열을 다른 문자열로 바꾸기 위해서는 translate 함수를 사용하는 것이 좀 더 바람직하다
  • translate는 주로 maektrans와 함께 사용한다
  • maketrans: 어떤 글자를 어떤 글자로 바꿀지, 치환 규칙을 저장하는 테이블을 생성하는 역할의 함수
    • 문자열로 입력시 (ex-4): 한 글자를 다른 한 글자로 치환
      - 첫 번째 파라미터: 바꾸고 싶은 문자열
      - 두 번째 파라미터: 대체해서 넣을 문자열
      - 세 번째 파라미터: 삭제하고 싶은 문자열 (문자 한 개 단위로 삭제됨)
      - 첫 번째 파라미터의 각각의 글자가 두 번째 파라미터의 문자열 각각의 글자로 치환된다! 즉, 첫 번째 파라미터와 두 번째 파라미터의 길이가 동일해야 함
    • 딕셔너리로 입력시 (ex-5): 치환 규칙을 딕셔너리로 입력하기 때문에, 한 글자의 문자를 여러 글자의 문자열로 치환할 수 있음! ex-4의 한 글자씩 치환하는 것보다 가독성이 높고, 자유롭게 유동적으로 활용 가능
  • translate: maketrans 함수를 통해 생성된 치환 테이블을 참고하여, 실질적으로 문자열의 치환을 수행하는 함수
# ex-4 : transalte의 기본적인 사용방법
# l이 x로, o가 y로 치환됨
a = 'hello world'
a_table = a.maketrans('lo', 'xy')
a = a.translate(a_table)
print(a) # hexxy wyrxd
# ex-5 : dictionary를 활용하는 방법
# l이 x로, o가 (string)으로 치환됨
a = 'hello world'

dictionary = {
  'l':'x',
  'o':'(string)'
}

a_table = a.maketrans(dictionary)
a = a.translate(a_table)
print(a) # hexx(string) w(string)rxd

 

3. 정규표현식 (re, sub, subn)

  • re는  Regular Expression, 즉 정규식을 편리하게 사용할 수 있도록 하는 라이브러리이다
  • 정규표현식: https://11001.tistory.com/38 
  • sub: 정규식을 이용하여, 매치되는 문자열을 치환하여 문자열로 다시 반환하는 함수
    - 첫 번째 파라미터(pattern): 바꾸고 싶은 문자열 정규식
    - 두 번째 파라미터(replace): 대체해서 넣을 문자열
    - 세 번째 파라미터(string): 작업을 수행할 문자열
    - 네 번째 파라미터(count): 치환을 수행할 횟수 (0이면 모두 치환, 양수면 지정 횟수만큼, 음수는 불가능)
  • subn: sub와 동일한 기능을 수행하지만, 몇 번 치환을 수행했는지도 함께 반환한다
# ex-6 : re와 sub를 이용한 간단한 치환 예제
import re

a = 'abcd-1234'
a = re.sub('[^0-9]', '*', a) # 0~9를 제외하고 모두 *로 변경
print(a) # *****1234
# ex-7 : re와 subn을 이용한 간단한 치환 예제
import re

a = 'abcd-1234'
a, n = re.subn('[^0-9]', '*', a) # 0~9를 제외하고 모두 *로 변경
print(a, n) # *****1234 5

 

이러한 문자열 치환 함수를 잘 사용한다면

원하는 문자열을 치환하는 것이 아니라 제거하는 것도 가능하다!

 

이 외에도 문자열 앞뒤에 특정 문자를 추가한다거나 / 문자열을 자른다거나 / 이어 붙이는 등

문자열을 다룰 수 있는 다양한 메소드가 존재합니다

이는 하단의 블로그에서 함께 참고해주시면 좋을 것 같습니다

https://nirsa.tistory.com/97

 

[Python 3.7] 파이썬 문자열 메서드 사용법 (replace, translate, split, join, upper, lower, strip, lstrip, rstrip, just

1. 문자열 변환 (replace) replace는 문자열을 변환 해줍니다. 아래 코드는 "Hello, World!" 문자열에서 "Hello,"를 "New"으로 변환 합니다. 각각 문자열을 직접 사용하여 변환된 문자열을 출력 하거나, 문자열

nirsa.tistory.com

 

 

정규표현식도 사실상 매우 다양한 방법이 있기 때문에 이 또한 별도의 링크에서 더 자세하게 확인할 수 있습니다

https://wikidocs.net/82868

 

07 문자열 패턴 바꾸기 (sub)

sub 메서드 ``` = re.sub(pattern, replace, string, count=0, flag=0) sub 정규식과 매치되면 변경 시킴 sub 메쏘드는 주어…

wikidocs.net

 

 

 

혹여나 본 포스트에서 빠뜨린 방법이 있거나 오류가 있다면,

댓글로 알려주신다면 감사한 마음으로 참고하고 포스트를 수정하도록 하겠습니다 :)

728x90
반응형