티스토리 뷰

영어와 한글이 섞여있는 문장에서 한글만 추출하는 방법을 알아보겠습니다.

 

영어, 특수문자, 한글, 한문 등.. 다양한 종류의 언어로 구성된 문자열에서 한글만 추출하고 싶을 때가 있습니다. 한글을 제외한 다른 문자들은 불필요한 문자라서 한글만 추출할 수 있고, 의미가 없는 문자들이 붙어있는 경우 필요한 문자만 추출하려고 한글만 추출하는 경우가 있습니다.

 

정규표현식으로 한글 추출

정규표현식을 사용하여 문자열에서 한글만 찾을 수 있고, 찾은 문장을 추출할 수 있습니다. 추출한 뒤에 다시 문장을 하나의 문자열로 연결하는 방식입니다.

  • re.compile('[ㄱ-ㅎ가-힣]+') : 한글에 대한 정규표현식 패턴
  • pattern.findall(str) : 패턴과 일치하는 텍스트를 모두 찾고, 각각의 문자열을 리스트로 리턴
  • ''.join(matches) : 찾은 한글 문자열들을 공백 없이 하나의 문자열로 연결
  • ' '.join(matches) : 찾은 한글 문자열들 사이에 공백을 추가하여 하나의 문자열로 연결
import re

str = "안녕하세요~!! Hello, 123 你 World 여러분"
pattern = re.compile('[ㄱ-ㅎ가-힣]+')
matches = pattern.findall(str)

# 띄어쓰기 없이 한글 추출
result = ''.join(matches)
print(result)

# 단어마다 띄어쓰기 추가하여 한글 추출
result = ' '.join(matches)
print(result)

Output:

안녕하세요여러분
안녕하세요 여러분

 

re.sub()를 이용한 방법

re.sub(pattern, repl, str)은 str에서 patten에 해당하는 문자들을 repl로 교체하는 것인데, 아래와 같이 한글이 아닌 문자열 패턴을 찾고, 빈문자열로 변환하여 제거할 수 있습니다. 그럼 아래 결과처럼 한글을 제외한 다른 문자들은 모두 제거됩니다.

  • re.compile('[^ㄱ-ㅎ가-힣]+') : 한글이 아닌 문자들에 대한 정규표현식 패턴 (^는 not의 의미로, 한글이 아닌 문자로 해석)
import re

str = "안녕하세요~!! Hello, 123 你 World 여러분"
pattern = re.compile('[^ㄱ-ㅎ가-힣]+')

result = re.sub(pattern, '', str)
print(result)

Output:

안녕하세요여러분

 

위 코드는 아래와 같이 compile()로 패턴 객체를 대신에 r'pattern'으로 패턴을 바로 입력할 수 있습니다.

import re

str = "안녕하세요~!! Hello, 123 你 World 여러분"
result = re.sub(r'[^ㄱ-ㅎ가-힣]+', '', str)
print(result)

 

문자열에서 한글과 공백(Space)만 추출

문자열에서 공백(space)도 함께 추출하려면, 정규표현식에 공백에 대한 패턴을 추가하면 됩니다. 따라서 아래와 같이 한글과 공백이 아닌 문자를 찾아 제거하면 한글과 공백만 추출할 수 있습니다.

  • \s : 공백 문자 1개를 의미하는 정규표현식 패턴
  • [^ㄱ-ㅎ가-힣\s]+ : 한글과 공백이 아닌 문자들에 대한 패턴
import re

str = "안녕하세요~!! Hello, 123 你 World 여러분"
result = re.sub(r'[^ㄱ-ㅎ가-힣\s]+', '', str)
print(result)
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함