본문 바로가기
자기 개발/Python

파이썬(Python) 공부 3편 — 문자열(String) 완전 정복 | 인덱싱·슬라이싱·메서드·f-string 심화까지

by conrad 2026. 3. 27.
03 / 15 Python 공부 시리즈 — 문자열(String)
← 2편: 변수와 자료형 보러 가기
Python 공부 시리즈 · 3편 | 문자열 · 인덱싱 · 슬라이싱 · 메서드

파이썬(Python) 공부 3편
문자열(String) 완전 정복

파이썬에서 문자열은 가장 자주 다루는 자료형입니다. 텍스트 처리, 웹 스크래핑, 파일 읽기, API 응답 파싱까지 어디서나 등장합니다. 인덱싱·슬라이싱부터 수십 가지 문자열 메서드, f-string 심화, 이스케이프 문자까지 한 번에 정리합니다.

인덱싱 & 슬라이싱 문자열 메서드 총정리 f-string 심화 이스케이프 문자 문자열 포매팅 비교

📝 문자열 선언 — 따옴표의 종류와 차이

파이썬 문자열은 작은따옴표(' '), 큰따옴표(" "), 삼중 따옴표(''' ''' 또는 """ """) 세 가지 방식으로 만들 수 있습니다. 기능상 차이는 없으나 각각 유용한 상황이 있습니다.

 
string_declare.py
# 작은따옴표 / 큰따옴표 — 기능 동일
s1 = 'Hello'
s2 = "World"

# 따옴표 안에 다른 종류 따옴표 사용 가능
s3 = "It's a beautiful day"   # 작은따옴표 포함
s4 = 'He said "Hello"'        # 큰따옴표 포함

# 삼중 따옴표 — 여러 줄 문자열, 줄바꿈 그대로 유지
multiline = """파이썬은
배우기 쉽고
쓸 곳이 많다."""
print(multiline)

# 문자열 길이 — len()
print(len("Hello"))    # 5
print(len("파이썬"))   # 3 (한글도 한 글자 = 1)

# 문자열 반복과 연결
print("Ha" * 3)              # HaHaHa
print("Hello" + " " + "World") # Hello World
Python 문자열 코드 프로그래밍 ▲ 파이썬 문자열은 텍스트 처리의 핵심 도구다. 인덱싱·슬라이싱·메서드를 익히면 실무에서 마주치는 대부분의 문자열 작업을 처리할 수 있다. (출처: Unsplash / 참고 이미지)

이스케이프 문자 — 특수 문자를 문자열에 넣기

백슬래시(\)로 시작하는 특수 문자 표현을 이스케이프 문자(Escape Character)라고 합니다.

이스케이프 의미 예시 출력 결과
\n 줄바꿈 (newline) print("a\nb") a
b
\t 탭 (tab) print("a\tb") a    b
\\ 백슬래시 자체 print("C:\\Users") C:\Users
\' 작은따옴표 print('It\'s') It's
\" 큰따옴표 print("say \"hi\"") say "hi"
r"..." raw string (\ 무시) r"C:\new\test" C:\new\test
r"..." — raw string, 파일 경로·정규식에서 유용

문자열 앞에 r을 붙이면 백슬래시를 이스케이프로 처리하지 않고 그대로 출력합니다. Windows 파일 경로나 정규표현식 패턴 작성 시 자주 활용됩니다.

  • print("C:\new\test")C:(줄바꿈)ew(탭)est ← 의도치 않은 결과
  • print(r"C:\new\test")C:\new\test ← raw string으로 해결

🔍 인덱싱(Indexing) — 특정 위치의 문자 꺼내기

파이썬 문자열은 각 문자마다 인덱스(위치 번호)가 있습니다. 앞에서부터는 0부터 시작하고, 뒤에서부터는 -1부터 시작합니다.

s = "Hello, Python!"

012345678910111213
H
e
l
l
o
,
 
P
y
t
h
o
n
!
-14-13-12-11-10-9-8-7-6-5-4-3-2-1

파란색: s[0]='H', s[-1]='!' | 위쪽: 양수 인덱스 | 아래쪽: 음수 인덱스

 
indexing.py
s = "Hello, Python!"

# 양수 인덱스 (앞에서부터, 0 시작)
print(s[0])    # H
print(s[1])    # e
print(s[7])    # P

# 음수 인덱스 (뒤에서부터, -1 시작)
print(s[-1])   # ! (마지막 문자)
print(s[-2])   # n
print(s[-7])   # P

# 범위 초과 → IndexError 발생 주의
# print(s[100])  → IndexError!

슬라이싱(Slicing) — 문자열 자르기

슬라이싱은 s[start : end : step] 형식으로 문자열의 일부를 잘라냅니다. end 인덱스의 문자는 포함되지 않습니다(end-1까지 포함).

 
slicing.py
s = "Hello, Python!"

# 기본 슬라이싱 s[start:end]  (end 미포함)
print(s[0:5])    # Hello    (0,1,2,3,4번 인덱스)
print(s[7:13])   # Python

# start 생략 → 처음부터
print(s[:5])     # Hello

# end 생략 → 끝까지
print(s[7:])     # Python!

# 전체 복사
print(s[:])      # Hello, Python!

# step 사용 s[start:end:step]
print(s[0:10:2])  # Hlo P  (2칸씩 건너뜀)
print(s[::2])     # Hlo yhn (전체에서 2칸씩)

# step = -1 → 문자열 뒤집기 (역순)
print(s[::-1])    # !nohtyP ,olleH

# 음수 인덱스 슬라이싱
print(s[-7:-1])   # Python
💡
핵심 요약 슬라이싱 3가지 규칙
  • end 인덱스는 포함 안 됨: s[0:5]는 0,1,2,3,4번 → 5번 인덱스 제외
  • 범위 초과해도 오류 없음: s[0:100]은 문자열 끝까지만 반환 (인덱싱과 다름)
  • s[::-1]로 문자열 뒤집기: 파이썬에서 문자열을 뒤집는 가장 간단한 방법

🔨 문자열 메서드 총정리 — 자주 쓰는 것만 제대로

파이썬 문자열에는 수십 가지 내장 메서드가 있습니다. 메서드는 원본 문자열을 변경하지 않고 새 문자열을 반환합니다. 문자열은 불변(immutable) 객체이기 때문입니다.

 
method_case.py — 대소문자 변환
s = "hello, Python World"

print(s.upper())       # HELLO, PYTHON WORLD
print(s.lower())       # hello, python world
print(s.capitalize())  # Hello, python world (첫 글자만 대문자)
print(s.title())       # Hello, Python World (각 단어 첫 글자 대문자)
print(s.swapcase())    # HELLO, pYTHON wORLD (대소문자 반전)
 
method_strip.py — 공백 및 문자 제거
s = "   Hello, World!   "

print(s.strip())    # "Hello, World!"  (양쪽 공백 제거)
print(s.lstrip())   # "Hello, World!   " (왼쪽만)
print(s.rstrip())   # "   Hello, World!" (오른쪽만)

# 특정 문자 제거도 가능
s2 = "###Python###"
print(s2.strip("#"))   # Python
 
method_search.py — 검색 및 포함 여부
s = "Hello, Python! Python is great."

# 포함 여부 (가장 자주 쓰임)
print("Python" in s)      # True
print("Java" not in s)   # True

# 위치 찾기
print(s.find("Python"))    # 7  (처음 등장 위치, 없으면 -1)
print(s.rfind("Python"))   # 15 (마지막 등장 위치)
print(s.index("Python"))   # 7  (없으면 ValueError!)
print(s.count("Python"))   # 2  (등장 횟수)

# 시작/끝 확인
print(s.startswith("Hello"))  # True
print(s.endswith("great."))  # True
 
method_split_join.py — 분리와 결합
# split() — 문자열을 리스트로 분리 (실무에서 매우 자주 사용)
csv = "apple,banana,cherry"
print(csv.split(","))      # ['apple', 'banana', 'cherry']

sentence = "Hello World Python"
print(sentence.split())    # ['Hello', 'World', 'Python'] (기본: 공백)
print(sentence.split(" ", 1))  # ['Hello', 'World Python'] (1번만 분리)

# splitlines() — 줄바꿈 기준으로 분리
multi = "line1\nline2\nline3"
print(multi.splitlines())   # ['line1', 'line2', 'line3']

# join() — 리스트를 문자열로 결합
words = ["apple", "banana", "cherry"]
print(", ".join(words))    # apple, banana, cherry
print("-".join(words))     # apple-banana-cherry
print("".join(words))      # applebananacherry
 
method_replace.py — 교체와 정렬
# replace() — 문자열 교체
s = "Hello World World"
print(s.replace("World", "Python"))     # Hello Python Python (전체)
print(s.replace("World", "Python", 1))  # Hello Python World (1번만)

# 정렬 (고정 폭 출력 시 유용)
print("Hi".ljust(10))       # "Hi        " (왼쪽 정렬, 10칸)
print("Hi".rjust(10))       # "        Hi" (오른쪽 정렬)
print("Hi".center(10))      # "    Hi    " (가운데 정렬)
print("Hi".center(10, "*"))  # "****Hi****" (채울 문자 지정)

# 검사 메서드
print("123".isdigit())    # True  (모두 숫자?)
print("abc".isalpha())    # True  (모두 알파벳?)
print("abc123".isalnum()) # True  (알파벳+숫자?)
print("   ".isspace())    # True  (모두 공백?)
print("Hello".isupper())  # False (모두 대문자?)
메서드 설명 반환값
upper() / lower() 전체 대문자 / 소문자 변환 str
strip() / lstrip() / rstrip() 양쪽 / 왼쪽 / 오른쪽 공백(문자) 제거 str
find(sub) / rfind(sub) 부분 문자열 위치 (없으면 -1) int
count(sub) 부분 문자열 등장 횟수 int
replace(old, new) 문자열 교체 str
split(sep) 구분자로 분리 → 리스트 list
sep.join(list) 리스트를 sep으로 결합 str
startswith() / endswith() 시작 / 끝 문자열 확인 bool
isdigit() / isalpha() / isalnum() 숫자 / 알파벳 / 알파벳+숫자 여부 bool
zfill(n) 왼쪽에 0을 채워 n자리로 만들기 str

🆕 f-string 심화 — 형식 지정자까지

f-string은 파이썬 3.6부터 도입된 문자열 포매팅 방법으로, 가독성과 성능 면에서 가장 권장되는 방식입니다. 중괄호 안에 변수나 표현식, 형식 지정자를 함께 사용할 수 있습니다.

 
fstring_advanced.py
name = "Alice"
score = 95.678
count = 1234567

# 기본 사용
print(f"이름: {name}, 점수: {score}")
# 이름: Alice, 점수: 95.678

# 표현식 직접 사용
print(f"10 + 20 = {10 + 20}")          # 10 + 20 = 30
print(f"이름 길이: {len(name)}")       # 이름 길이: 5
print(f"대문자: {name.upper()}")       # 대문자: ALICE

# 소수점 자리수 지정 :.2f
print(f"점수: {score:.2f}")           # 점수: 95.68 (소수 2자리)
print(f"점수: {score:.0f}")           # 점수: 96 (반올림 정수)

# 천 단위 구분자 :,
print(f"인구: {count:,}")             # 인구: 1,234,567

# 너비 및 정렬 지정
print(f"{name:<10}")                  # "Alice     " (왼쪽 정렬, 10칸)
print(f"{name:>10}")                  # "     Alice" (오른쪽 정렬)
print(f"{name:^10}")                  # "  Alice   " (가운데 정렬)
print(f"{name:*^10}")                 # **Alice*** (*로 채움)

# 2진수, 16진수 변환
print(f"{255:b}")                      # 11111111 (2진수)
print(f"{255:x}")                      # ff (16진수)
print(f"{255:X}")                      # FF (대문자 16진수)

# Python 3.8+ — = 디버깅 출력
print(f"{score=}")                    # score=95.678 (변수명까지 출력)
📊
방법 비교 문자열 포매팅 3가지 방법 — f-string이 가장 권장

파이썬에는 문자열 포매팅 방법이 3가지 있습니다. 현재는 f-string(방법 3)을 사용하는 것이 표준입니다.

name, score = "Alice", 95

# 방법 1: % 포맷 (오래된 방식)
print("이름: %s, 점수: %d" % (name, score))

# 방법 2: .format() (Python 2.6+)
print("이름: {}, 점수: {}".format(name, score))

# 방법 3: f-string (Python 3.6+, 가장 권장)
print(f"이름: {name}, 점수: {score}")

📝 3편 실습 문제

실습 1 — 슬라이싱 연습
  • s = "Python Programming"
  • 슬라이싱으로 "Python"만 추출하기
  • 슬라이싱으로 "Programming"만 추출하기
  • 문자열을 뒤집어서 출력하기 ("gnimmargorP nohtyP")
  • 홀수 번째 인덱스 문자만 출력하기 ("yhoPormig")
실습 2 — 메서드 활용
  • email = " User@EXAMPLE.COM "
  • 양쪽 공백 제거 후 모두 소문자로 변환 → "user@example.com"
  • @ 기준으로 분리해서 아이디와 도메인 각각 출력
  • 도메인에서 "."의 개수 세기
 
practice_03.py — 예시 답안
# 실습 1
s = "Python Programming"
print(s[:6])       # Python
print(s[7:])       # Programming
print(s[::-1])     # gnimmargorP nohtyP
print(s[1::2])     # yhoPormig

# 실습 2
email = "  User@EXAMPLE.COM  "
cleaned = email.strip().lower()
print(cleaned)                     # user@example.com

parts = cleaned.split("@")
print(f"아이디: {parts[0]}")        # 아이디: user
print(f"도메인: {parts[1]}")        # 도메인: example.com
print(f"점 개수: {parts[1].count('.')}")  # 점 개수: 1
3편 핵심 요약
  • 문자열 선언: 작은따옴표·큰따옴표·삼중 따옴표 / 불변(immutable) 객체
  • 이스케이프: \n(줄바꿈) \t(탭) \\(백슬래시) / r"..."으로 raw string
  • 인덱싱: s[0](첫 문자) s[-1](마지막) / 0부터 시작 / 음수 인덱스 지원
  • 슬라이싱: s[start:end:step] / end는 미포함 / s[::-1]로 뒤집기
  • 주요 메서드: upper/lower/strip/find/replace/split/join/startswith/count
  • 메서드 특징: 원본 변경 없이 새 문자열 반환 (문자열은 불변)
  • f-string: f"{변수:.2f}" f"{변수:,}" f"{변수:>10}" 형식 지정자 활용
  • in 연산자: "sub" in s로 포함 여부 확인 — 가독성 높고 자주 사용
다음 편 예고 4편 — 조건문 if / elif / else 완전 정복

비교 연산자 / 논리 연산자 / 중첩 조건문 / 삼항 연산자 / match-case(3.10+)

🐍

※ 본 포스팅은 Python 3 공식 문서(docs.python.org)의 str 메서드 레퍼런스를 기반으로 작성된 학습용 콘텐츠입니다. 코드 예시는 Python 3.10 이상 환경에서 테스트되었습니다.