[Python] 정규표현식을 이용해 빈칸 문자 처리하기

김유상·2022년 12월 22일
0
post-custom-banner

텍스트 파일에서 문자열을 이용해 검색을 하다 보면 꼭 한번 쯤 공백 문자가 뒤죽박죽 섞여 있는 모습을 발견하게 된다. 이럴 때, 거의 써본 적도 없는 빈칸 문자 [ \t\n\r\f\v]와 마주하게 된다. 매우 당황스러운 것이 이 문자들이 얼마나 되는지도 모르고 심지어 종류가 무엇인지도 모르는 경우가 많은데 이 문제를 한번에 해결해주기 위해 만들어 놓은 것이 바로 정규표현식이다.

텍스트가 제시된 문자 형식과 일치하는지, 포함하고 있는지, 어디에 있는지, 얼마나 되는지 등 웬만한 정보는 모두 제공한다.

이중에서 필자가 필요로 했던 기능은 앞서 언급했던 빈칸 문자이다.

사람마다 띄어쓰기를 어떻게 하는지 혹은 언제 개행하는지 심지어 언제 탭을 누르는 지는 전부 다르기 때문에 모든 경우의 수를 고려하기는 매우 까다롭다.

  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.

위 방법을 사용하면 매우 쉽게 빈칸 문자를 제거할 수 있다. 아래에는 직접 공백을 제거할 때, 사용한 정규표현식 예시이다.

pattern = re.compile("\(\s{0,}SELECT", re.DOTALL)

'\('는 '('만 사용하면 메타 문자로 인식이 되기 때문에 오류가 날 수 있다. 따라서 메타 문자 앞에는 '\'를 이용해 실제 텍스트와 구분해줄 필요가 있다.

그리고 \s가 바로 whitespace 즉, 빈칸 문자를 모두 아우르는 키워드이다. 이 키워드를 사용하면 빈칸 문자를 필터링할 수 있고 다음에 {0, }을 사용하였는데 0번 사용하거나 그 이상을 의미한다. 따라서 빈칸 문자가 몇 번이든 (과 SELECT 사이에 존재할 수 있다는 것을 의미한다.

Referenced: https://docs.python.org/ko/3/howto/regex.html, https://wikidocs.net/4308

profile
continuous programming
post-custom-banner

0개의 댓글