본문으로 건너뛰기

Python 문자열 추출 (slicing, split)

어떤 문자열에서 문자열 일부분만 잘라서 추출하고 싶을 때가 있습니다. 필요한 문자열의 Index를 알고 있다면 문자열 슬라이싱으로 부분 문자열을 추출할 수 있습니다. 또는 특정 기호(구분자)로 문자열들이 구분되어있다면, split()을 사용하여 구분자를 기준으로 문자열을 자르고 필요한 부분만 추출할 수 있습니다.

1. 문자열 슬라이싱으로 문자열 추출

문자열 슬라이싱은 string[start:stop]의 형태로 추출하려는 문자열의 시작 Index와 마지막 Index를 입력하여 원하는 문자열을 추출할 수 있습니다. 문자열을 추출할 때 start Index의 문자열은 포함되고, stop Index의 문자열은 포함되지 않고 바로 이전 Index까지만 추출합니다.

아래와 같이 원하는 문자열을 잘라서 추출할 수 있습니다. [:7]처럼 시작 Index를 생략할 수 있는데 [0:7]와 동일한 의미이고 첫번째 문자부터 추출 문자열에 포함됩니다.

my_str = "This is a substring tutorial..!"

result = my_str[0:7]
print(result)

result = my_str[1:7] # a
print(result)

result = my_str[2:7]
print(result)

result = my_str[:7]
print(result)

Output:

This is
his is
is is
This is

1.1 슬라이싱으로 문자열 뒤에서 추출

[-5:]는 문자열의 뒤에서 5번째 Index부터 문자열의 마지막까지 자릅니다. [-4:-2]는 문자열 뒤에서 4번째에서 뒤에서 2번째까지 자릅니다. (-2는 stop Index이므로, 뒤에서 2번째는 추출 문자열에 포함되지 않음)

my_str = "This is a substring tutorial..!"

result = my_str[-5:]
print(result)

result = my_str[-3:]
print(result)

result = my_str[-4:-2]
print(result)

result = my_str[-4:-1]
print(result)

Output:

al..!
..!
l.
l..

2. split()으로 특정 문자열 추출

split은 string.split(separator)처럼 구분자(separator)를 인자로 전달하면, 그 구분자로 문자열을 분리합니다.

아래와 같이 많은 문자열이 콜론(:)으로 연결되었다면, split()으로 문자열을 분리하고, 원하는 문자열을 추출해서 사용할 수 있습니다.

text = 'Hello:world:python'
strings = text.split(':')
print(strings)
print(strings[0])
print(strings[1])
print(strings[2])

Output:

['Hello', 'world', 'python']
Hello
world
python

3. 정규표현식(regex)으로 문자열 추출

위에서 split()으로 구현한 문자열 추출 예제는 아래와 같이 정규표현식을 이용해서 구현할 수도 있습니다. 아래 예제에서 :으로 구분된 단어들은 r'(\w+):?'으로 구분할 수 있습니다. 단어 중에 :가 마지막에 포함되거나 포함되지 않은 모든 단어를 찾습니다.

import re

text = 'Hello:world:python'
strings = re.findall(r'(\w+):?', text)
print(strings)

Output:

['Hello', 'world', 'python']