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의 한 글자씩 치환하는 것보다 가독성이 높고, 자유롭게 유동적으로 활용 가능
- 문자열로 입력시 (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
이러한 문자열 치환 함수를 잘 사용한다면
원하는 문자열을 치환하는 것이 아니라 제거하는 것도 가능하다!
이 외에도 문자열 앞뒤에 특정 문자를 추가한다거나 / 문자열을 자른다거나 / 이어 붙이는 등
문자열을 다룰 수 있는 다양한 메소드가 존재합니다
이는 하단의 블로그에서 함께 참고해주시면 좋을 것 같습니다
정규표현식도 사실상 매우 다양한 방법이 있기 때문에 이 또한 별도의 링크에서 더 자세하게 확인할 수 있습니다
혹여나 본 포스트에서 빠뜨린 방법이 있거나 오류가 있다면,
댓글로 알려주신다면 감사한 마음으로 참고하고 포스트를 수정하도록 하겠습니다 :)
728x90
반응형
'Dev > PYTHON 파이썬' 카테고리의 다른 글
[OpenCV] 동영상 재생하기 | 웹캠 재생하기 | 웹캠으로 들어온 영상 저장하기 (VideoCapture, VideoWriter) (0) | 2022.03.16 |
---|---|
[Python] 여러 장의 이미지를 numpy 배열로 로드 (image to numpy) (1) | 2022.01.06 |
[OpenCV] 파이썬으로 동영상 프레임 초단위 저장/캡처하기 (Save Video Frame per Second by Python) (4) | 2022.01.04 |
파이썬 가상환경(Virtual Environments) 설치/생성/복제/삭제 (0) | 2021.10.28 |
[파이썬 프로젝트#1-1] 파이썬이란? (0) | 2020.09.06 |