파이썬 정규 표현식에서 공백 문자를 찾을 때 가장 많이 쓰이는 메타 문자는 \s입니다. 그런데 \s는 스페이스뿐 아니라 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r)까지 모두 포함하기 때문에, "공백은 매칭하되 줄바꿈은 제외하고 싶다"는 요구사항에는 그대로 사용할 수 없습니다. 이 글에서는 줄바꿈을 배제하고 공백만 매칭하는 방법을 예제와 함께 살펴봅니다.
\s가 줄바꿈까지 매칭되는 이유
\s는 내부적으로 [ \t\n\r\f\v]와 같은 의미입니다. 즉, 폼 피드나 수직 탭을 포함한 모든 공백 계열 문자가 매칭 대상이 됩니다. 아래 예제를 실행하면 여러 줄로 된 문자열에서 \s+가 줄바꿈까지 함께 잡아내는 것을 확인할 수 있습니다.
import re text = """I find Tutorialspoint useful""" print(re.findall(r"\s+", text))
실행 결과:
[' ', '\n', ' ']
방법 1: 부정형 문자 클래스 [^\S\r\n] 활용
가장 널리 쓰이는 해결책은 부정형 문자 클래스입니다. [^\S\r\n]는 "공백 문자이되, 캐리지 리턴(\r)과 줄바꿈(\n)은 제외"한다는 의미로 해석할 수 있습니다.
import re
text = """I find
Tutorialspoint useful"""
print(re.findall(r"[^\S\r\n]+", text))
실행 결과:
[' ', ' ', ' ']
출력을 보면 줄바꿈 문자는 결과에 전혀 포함되지 않고, 스페이스와 탭만 깔끔하게 추출된 것을 확인할 수 있습니다.
방법 2: 필요한 공백 문자를 직접 나열
매칭 대상을 더 명확하게 통제하고 싶다면 문자 클래스에 원하는 문자만 직접 나열하는 방법도 좋습니다. 스페이스와 탭만 허용하려면 다음과 같이 작성합니다.
import re text = "apple\tbanana cherry" print(re.findall(r"[ \t]+", text))
실행 결과:
['\t', ' ']
정리
\s는 줄바꿈을 포함한 모든 공백 문자를 매칭하므로 주의해야 합니다.- 줄바꿈을 제외한 공백만 매칭하려면
[^\S\r\n]+패턴을 사용하세요. - 스페이스·탭처럼 필요한 문자만 정확히 지정하고 싶다면
[ \t]+처럼 문자 클래스를 직접 구성하는 것이 가장 안전합니다.