파이썬의 re 모듈을 사용하면 정규식으로 문자열에서 공백이 아닌(non-whitespace) 문자를 손쉽게 찾아낼 수 있습니다. 핵심은 바로 \S 패턴입니다.
\S 패턴이란?
정규식에서 \S는 공백(스페이스, 탭, 줄바꿈 등)을 제외한 모든 문자 하나와 일치합니다. 여기에 +를 붙인 \S+를 사용하면, 공백으로 구분된 연속된 문자 덩어리 전체를 한 번에 매칭할 수 있습니다.
re.search()로 첫 번째 매칭 찾기
다음 코드는 주어진 문자열에서 공백이 아닌 문자들의 첫 번째 묶음을 검색합니다.
import re foo = re.search(r'\S+', 'Need for Speed 2') print(foo)
실행 결과
<re.Match object; span=(0, 4), match='Need'>
re.search()는 문자열 전체를 훑어 패턴과 일치하는 첫 번째 부분만 반환합니다. 위 예제에서는 문자열 맨 앞의 'Need'가 매칭되며, 결과는 매치 객체(Match object) 형태로 출력됩니다. 매치 객체에는 일치한 위치(span)와 실제 일치한 문자열 정보가 함께 담겨 있습니다.
re.findall()로 모든 매칭 찾기
문자열 내의 공백이 아닌 문자 묶음을 모두 찾아 리스트로 받고 싶다면 re.findall()을 사용합니다.
import re foo = re.findall(r'\S+', 'Need for Speed 2') print(foo)
실행 결과
['Need', 'for', 'Speed', '2']
re.findall()은 패턴과 일치하는 모든 부분을 찾아 문자열 리스트로 반환합니다. 위 예제에서는 공백을 기준으로 나뉜 네 개의 단어가 각각 리스트 요소로 출력된 것을 확인할 수 있습니다.
정리
\S: 공백이 아닌 문자 하나와 일치\S+: 공백이 아닌 문자가 하나 이상 연속된 구간 전체와 일치re.search(): 첫 번째 매칭 결과를 매치 객체로 반환re.findall(): 모든 매칭 결과를 리스트로 반환
참고로 파이썬 2에서는 print foo처럼 괄호 없이 사용했지만, 파이썬 3부터는 print(foo)처럼 함수 형태로 호출해야 하므로 주의하세요.