<개인공부>/[Python]

[python] 파이썬 문자열 String 메서드 정리 (count, find, upper, lower, strip, replace)

BlockDMask 2021. 1. 1. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 지난 시간에 이어서 파이썬 문자열 String에 대해서 좀 더 알아보려고 합니다.
바로 파이썬 문자열 관련 함수, 메서드들에 대해서 알아보려 하는데 문자열을 세는 함수, 공백을 지우는 함수, 대문자 소문자로 바꾸는 함수 등 여러 함수를 알아보려고 합니다.

<목차>
1. count 메서드
2. find, rfind 메서드
3. upper, lower, swapcase 메서드
4. capitalize, title 메서드
5. lstrip, rstrip, strip 메서드
6. replace 메서드

 

1. 파이썬 문자열 count


count라는 메서드는 문자열 내부에서 특정 문자가 등장하는 횟수를 알려줍니다.

문자열.count(x)

문자열.count(x, start)

문자열.count(x, start, end)

count 메서드의 생김새는 위와 같습니다. 보기 쉽게 세 개로 나누어 보았습니다.

첫 번째 : 문자열.count(x)는 문자열 전 범위에서 x가 등장하는 횟수를 반환하는 메서드입니다.
당연하게 문자열 내부에 없는 x를 검색하면 0개가 나오겠죠?

두 번째 : 문자열.count(x, start)는 문자열 start index 부분에서부터 시작해서 문자열 끝까지 x가 등장하는 횟수를 반환하는 메서드입니다.

세 번째 : 문자열.count(x, start, end)는 문자열 start index 부분에서 end index 부분까지의 부분 문자열에서 x가 등장하는 횟수를 반환하는 메서드입니다.

바로 예제로 확인해볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
= "blockdmask"
 
r1 = s.count('k')
print(f"s.count('k') : {r1}")
 
r2 = s.count('z')
print(f"s.count('z') : {r2}")
 
# s[6]은 'm' 입니다.
r3 = s.count('k'6)
print(f"s.count('k', 6) : {r3}")
 
# s[3]은 'c' 입니다.
r4 = s.count('k'36)
print(f"s.count('k', 3, 6) : {r4}")
 
cs

파이썬 문자열 count 메서드 예제 결과

문자열에서 특정 문자의 개수를 세는 메서드 count 함수의 예제입니다.
인자로 'k' 하나만 있는 s.count('k')
start 범위를 지정해준 s.count('k', 6)
start, end 범위를 지정해준 s.count('k', 3, 6) 까지 알아보았습니다.

 

2. 파이썬 문자열 find, rfind


위의 count메서드가 문자열 내부에 특정 문자가 몇 개 있는지 세어주는 메서드였다면, 
find 메서드는 특정 문자가 존재하는지 확인하고 존재하는 위치의 index를 찾아주는 메서드입니다.
find 메서드의 모양은 아래와 같습니다. 이것 또한 보기 쉽게 정리해보았습니다.

2-1) 파이썬 find 메서드

문자열.find(x)

문자열.find(x, start)

문자열.find(x, start, end)

문자열에서 find 메서드를 이용해서 찾고 싶은 문자 x를 입력하면 그 문자가 존재하는 인덱스를 반환합니다.

만약 찾고 싶은 문자가 없다면 -1을 반환합니다.

만약 찾고싶은 문자가 여러 개 라면 맨 처음에 찾은 인덱스를 반환합니다.

예제는 아래 rfind 메서드와 함께 작성해 놓겠습니다.

 

2-2) 파이썬 rfind 메서드

rfind 메서드도 find 메서드와 비슷합니다.

문자열.rfind(x)

문자열.rfind(x, start)

문자열.rfind(x, start, end)

문자열에서 rfind 메서드를 이용해서 찾고 싶은 문자 x를 입력하면 그 문자가 존재하는 인덱스를 반환합니다.

만약 문자가 없다면 -1을 반환합니다.

rfind 메서드는 찾는 문자가 여러 개 있다면 맨 마지막 인덱스를 반환합니다.

예제로 확인해볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
= "blockdmask"
 
r1 = s.find('k')
print(f"s.find('k') : {r1}")
 
r2 = s.rfind('k')
print(f"s.rfind('k') : {r2}")
 
r3 = s.find('z')
print(f"s.find('z') : {r3}")
 
r4 = s.rfind('z')
print(f"s.rfind('z') : {r4}")
 
# s[6]은 'm' 입니다.
r5 = s.find('k'6)
print(f"s.find('k', 6) : {r5}")
 
# s[3]은 'c' 입니다.
r6 = s.find('k'36)
print(f"s.find('k', 3, 6) : {r6}")
 
cs

파이썬 문자열 find, rfind 메서드 예제

예제 결과를 보면 find, rfind는 문자열 내부에 있는 문자를 찾아서 그 위치를 반환하는 것을 볼 수 있습니다.
찾는 문자가 없는 경우에는 -1도 반환하는 것을 볼 수 있습니다.
문자가 여러 개 존재하는 경우에 find는 맨 처음 인덱스를 반환하고, rfind는 맨 마지막 인덱스를 반환하는 것 또한 알 수 있습니다.

 

3. 파이썬 문자열 upper, lower, swapcase


이번에 소개할 메서드는 upper, lower, swapcase 메서드들입니다.
이 메서드들을 묶은 이유는 대소문자로 바꿔주는 메서드들 이기 때문입니다.

3-1) upper, lower 메서드

문자열.upper()

문자열.lower()

문자열.uppper() 메서드는 문자열의 모든 문자를 대문자로 바꿔주는 메서드 입니다.

문자열.lower() 메서드는 문자열의 모든 문자를 소문자로 바꿔주는 메서드입니다.

 

3-2) swapcase 메서드

문자열.swapcase()

문자열.swapcase() 메서드는 문자열의 소문자는 대문자로, 대문자는 소문자로 서로 바꿔주는 메서드입니다.

바로 예제로 확인하시죠.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= "BlockDMask"
 
print(f"문자열 : {s}")
 
# 대문자로 
r1 = s.upper()
print(f"{s}.upper() : {r1}")
 
# 소문자로
r2 = s.lower()
print(f"{s}.lower() : {r2}")
 
# 대문자 -> 소문자, 소문자 -> 대문자
r3 = s.swapcase()
print(f"{s}.swapcase() : {r3}")
 
# 바꾼걸 또 
r4 = r3.swapcase()
print(f"{r3}.swapcase() : {r4}")
 
cs

파이썬 문자열 대소문자 변경

이렇게 upper()는 문자열을 대문자로 변경, lower()는 문자열을 소문자로 변경하는 것을 알 수 있습니다.
swapcase() 메서드는 대문자를 소문자로, 소문자는 대문자로 스왑 해주는 것을 확인할 수 있습니다.

 

4. 파이썬 문자열 capitalize, title


4-1) capitalize 메서드

문자열.capitalize()

capitalize() 메서드는 첫 문자만 대문자로 변경하고 나머지 문자열은 모두 소문자로 변경한 문자열을 반환합니다.

다시 이야기하면 첫 문자 빼고 다 소문자로 변경, 첫 문자만 대문자로 변경하는 함수입니다.

"abc def"라는 문자열이 있으면 "Abc def" 이런 형식으로 문자열을 변경해서 반환해 줍니다.

 

4-2) title 메서드

문자열.title()

title() 메서드는 각 단어의 앞 문자를 대문자로 바꿔주고 다른 문자들은 소문자로 변경한 문자열을 반환합니다.

"abc def"라는 문자열이 있으면 "Abc Def" 이런 식으로 문자열을 바꿔서 반환합니다.

 

문자열 대문자로 변경하는 title, capitalize 메서드를 예제로 확인해 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
s1 = "this is my blog. 123 456"
s2 = "THIS IS MY BLOG. 123 456"
 
print(f"문자열 : {s1}")
 
r1 = s1.capitalize()
print(f"s1.capitalize() : {r1}")
 
r2 = s1.title()
print(f"s1.title() : {r2}")
 
 
print(f"\n문자열 : {s2}")
 
r3 = s2.capitalize()
print(f"s2.capitalize() : {r3}")
 
r4 = s2.title()
print(f"s2.title() : {r4}")
 
cs

파이썬 문자열 title, capitalize 메서드 예제

capicalize() 메서드, title() 메서드가 비슷한 것 같으면서도 다른 메서드라는 게 보이나요?
capicalize() 메서드의 결과를 보면 문자열의 맨 앞만 대문자로 변경되고 나머지는 다 소문자인 것을 볼 수 있고,
title() 메서드를 보면 각 단어 맨 앞 문자가 대문자로 변경된 것을 볼 수 있습니다.

당연하게도 숫자는 대소문자가 없기 때문에, 신경 쓰지 않아도 됩니다.

 

5. 파이썬 문자열 lstrip, rstrip, strip


5-1) lstrip, rstrip 메서드

문자열.lstrip()

문자열.rstrip()

lstrip() 메서드는 기존 문자열에 있는 왼쪽 left 공백을 제거한 문자열을 반환하는 메서드입니다.

rstrip() 메서드는 기존 문자열에 있는 오른쪽 right 공백을 제거한 문자열을 반환하는 메서드입니다.

 

5-2) strip 메서드

문자열.strip()

strip() 메서드는 원래 문자열의 왼쪽, 오른쪽 그러니까 양쪽의 공백을 제거한 문자열을 반환하는 메서드입니다.

 

문자열 공백 제거 strip 메서드를 예제로 확인해 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
= "  문자열 공백이 어디있나  "
 
print(f"문자열 : |{s}|")
 
r1 = s.lstrip()
print(f"s.lstrip() : |{r1}|")
 
r2 = s.rstrip()
print(f"s.rstrip() : |{r2}|")
 
r3 = s.strip()
print(f"s.strip() : |{r3}|")
 
cs

파이썬 문자열 공백 제거 (strip, lstrip, rstrip) 예제

이렇게 lstrip, rstrip, strip 메서드를 이용하면 문자열 끝에 있는 공백을 제거할 수 있습니다.
간편하죠?

 

6. 파이썬 문자열 replace


문자열.replace(old, new)

문자열.replace(old, new, count)

replace(old, new) 문자열 메서드는 기존 문자에 있는 문자 old를 new 문자로 변경해서, 그 변경한 문자열을 반환하는 메서드입니다.

두 번째에 정의되어있는 replace(old, new, count)는 해당 문자가 여러 개 일 때 일부만 변경하고 싶을 때 사용합니다. count의 개수만큼만 old 문자를 new 문자로 변경해 줍니다.

 

replace 메서드 예제로 한번 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
= "blockdmask blog"
 
print(f"원본 : {s}")
 
r1 = s.replace('k''z')
print(f"s.replace('k', 'z') : {r1}")
 
r2 = s.replace('b''f'1)
print(f"s.replace('b', 'f', 1) : {r2}")
 
r3 = s.replace('b''f'2)
print(f"s.replace('b', 'f', 2) : {r3}")
 
r3 = s.replace('b''f'3)
print(f"s.replace('b', 'f', 3) : {r3}")
 
print(f"원본 : {s}")
 
cs

파이썬 문자열 replace 예제

이렇게 replace 함수를 이용하면 문자열 내부에 있는 문자를 다른 문자로 바꾸어서 새로운 문자열을 만들 수 있습니다.
replace(old, new) 꼭 기억해주세요.

replace(old, new, count) 예시를 보면
문자열 'k'가 blockdmask blog에서 딱 두 개만 있는 걸 볼 수 있는데, s.replace('b', 'f', 3) 함수에서 에러가 나지 않는 것을 보면, 세 번째 매개변수로 집어넣은 count가 old 개수보다 많아도 상관이 없는 것으로 보입니다. 

마지막을 보면 원본 문자열이 변경되지 않는 것을 확인할 수 있습니다.
문자열은 값을 변경할 수 없는 자료형이기 때문에 값을 변경한다는 것은 새로운 복사본을 만드는 것과 똑같은 이야기 라 생각하면 될 것 같습니다.

 

여기까지. 파이썬 문자열의 메서드(내장 함수)들에 대해서 알아보았습니다.
더 궁금한 메서드들이 있다면 댓글로 달아주세요. 추후 내용 추가하겠습니다.
감사합니다.

반응형