string.upper() : 소문자를 대문자로 변환
string.lower() : 대문자를 소문자로 변환
string.title() : 각 단어의 첫 글자를 대문자로, 나머지는 소문자로 변환
string.capitalize() : 첫 글자를 대문자로, 나머지는 소문자로 변환
string.swapcase() : 대문자는 소문자로, 소문자는 대문자로 변환
string.count('target') : string 내 target 문자(문자열)의 개수 반환
string.find('target') : string 내 가장 처음 나오는 target 문자(문자열)의 index 반환, target이 존재하지 않으면 -1 반환
string.index('target') : find와 기능은 같지만 target이 존재하지 않으면 에러가 난다.
string.startswith('target') : string 내 시작이 target 문자(문자열)이면 True, 아니면 False 반환
string.endswith('target') : string 내 끝이 target 문자(문자열)이면 True, 아니면 False 반환
※ rfind, rindex의 경우 인덱스를 오른쪽에서부터 찾아줌
string.isdigit() : 문자열이 숫자로만 이루어져 있으면 True, 아니면 False
string.isalpha() : 문자열이 문자로만 이루어져 있으면 True, 아니면 False
string.isalnum() : 문자열이 숫자와 문자로만 이루어져 있으면 True, 아니면 False
string.islower() : 문자열이 소문자로만 이루어져 있으면 True, 아니면 False
string.isupper() : 문자열이 대문자로만 이루어져 있으면 True, 아니면 False
string.isspace() : 문자열이 공백으로만 이루어져 있으면 True, 아니면 False
string.split('target') : target을 기준으로 문자열 분리 후 각 값들을 저장한 리스트 반환
split()으로 하게되면 공백으로 분리
'target'.join(string) : 문자열 join (아래 코드 예시 참조)
[] : 문자열 집합
[a-z] : a부터 z까지
[^a] : a를 제외한 모든 문자
[^1-9a-z] : 1 ~ 9, a ~ z를 제외한 모든 문자
re.sub(r'정규 표현식', '바꿀 문자', text) : text 내 정규 표현식 패턴 문자들을 바꿀 문자로 변환
string = 'abcdefg'
string[::2] : 'aceg' # i+2번째 인덱스만 저장
string[::-1] : 'gfedcba' # reverse
list(string) : ['a', 'b', 'c', 'd', 'e', 'f', 'g']
chr(65) : 'A' # ascii -> string
ord('A') : 65 # string -> ascii
string.rjust(원하는 문자열 길이, 문자) : 문자열 오른쪽에 원하는 문자열 길이만큼 문자 추가
string.ljust(원하는 문자열 길이, 문자) : 문자열 왼쪽에 원하는 문자열 길이만큼 문자 추가
# 1. 대/소문자 변환
sentence = 'Hi my name is 2HoJin or 2hojin'
print(sentence.upper()) # HI MY NAME IS 2HOJIN OR 2HOJIN
print(sentence.lower()) # hi my name is 2hojin or 2hojin
print(sentence.title()) # Hi My Name Is 2Hojin Or 2Hojin
print(sentence.capitalize()) # Hi my name is 2hojin or 2hojin
print('2hojin'.capitalize()) # 2hojin / 2Hojin.capitalize()도 동일 결과
print(sentence.swapcase()) # hI MY NAME IS 2hOjIN OR 2HOJIN
# title은 문장 내 단어들을 공백으로 구분해 대/소문자를 변환한다. 이 때 단어 시작이 영문자가 아니어도 변환한다.
# capitalize는 문장이어도 한 따옴표 안에 있으면 하나로 취급하고 맨 앞만 대문자로 바꾼다.
# 이 때 맨 앞이 영문자가 아니면 대문자로 변환하지 않는다.
# 2. 문자열 찾기
word = 'aabbbaa'
word.find('aa') # 0
word.rfind('aa') # 5 / 오른쪽부터 탐색 시 5, 6 index인 aa가 먼저 나오므로 시작인 5 반환
word.find('aaa') # -1
word.index('aaa') # ValueError
# 3. 문자열 구성 파악
word = ' a'
word.isalnum() # False
word.isalpha() # False
word.isspace() # False
# 공백은 문자도 숫자도 아닌 space 그 자체이다.
# 4. join & split
words = ['hi', 'my', 'name', 'is', 'chanu']
print(' '.join(words)) # 'hi my name is chanu'
print(''.join(words)) # 'himynameischanu'
sentence = 'hi my name is chanu'
print(' '.join(sentence)) # 'h i m y n a m e i s c h a n u'
# 한 문자열에 join 함수를 쓰면 문자열 사이에 모든 target이 다 들어감
# 리스트에 join 함수 사용 시 리스트 내 값들 사이에 target이 들어감
# 5. 정규 표현식
import re
re.sub(r'[0-9a-zA-Z]', '1', 'hi my name is chanu') # '11 11 1111 11 11111'
re.sub(r'[^0-9a-z]', '*', 'Hi My Name is Chanu') # '*i**y**ame*is**hanu'
# 0-9, a-z를 제외한 모든 문자를 *로 변경 (공백도 *로 변경)
# [0-9], [a-z], [A-Z]에는 모두 공백이 포함되지만 ^(not)이 어느 집합이든 조건에 들어가면 공백이 포함되지 않게 된다.
# 6. 기타
words = 'abc'
print(words.rjust(10, '*')) # *******abc
print(words.ljust(10, '*')) # abc*******
코딩테스트 문제에서 문자열 부분을 풀며 코드를 길게 구현하고 다른 풀이를 확인해보니 내가 모르는 문자열 함수를 사용하면 훨씬 간단하게 해결되는 경우가 많았다.
거의 모든 str 관련 함수를 정리했으니 활용을 잘 해야겠다.