본문 바로가기

개발

간단한 정규표현식

 

자연어 처리를 하면서 특정 패턴을 제거해야할 때 정규 표현식을 활용합니다.

 

특히 .*?\ 에 대하여 이해를 정확히 하고 사용하는 중요한데, 각각의 뜻은 다음과 같습니다. 

  • .: 임의의 한 문자
  • *: 앞에 있는 문자가 0번 이상 반복됨을 나타냅니다.
  • ?: 가능한 한 적게 일치하도록 합니다.
  • \: 이스케이프 문자로, 다음에 오는 문자를 특수 문자가 아닌 일반 문자로 인식하도록 합니다.

따라서 .*?\는 임의의 문자열을 가능한 한 적게 일치하도록 찾습니다. .은 어떤 문자든 가능하고, *는 이전의 문자(즉, .)가 0번 이상 반복될 수 있음을 의미합니다. 그러나 ?가 있으므로 가능한 한 적게 일치하도록 하기 때문에 최소한의 문자열만 일치하게 됩니다. 마지막으로 \는 ?를 특수 문자가 아닌 일반 문자로 인식하게 합니다.

 

즉, .*?\는 최소한의 문자열을 일치시키는 "최소 매칭(non-greedy)"을 수행합니다. 예를 들어 .*?abc는 "abc"가 나오기 직전의 최소한의 문자열만 일치시킵니다. 만약 .*abc와 같이 "greedy" 매칭을 수행한다면 "abc"가 마지막으로 나오기 직전까지의 모든 문자열을 일치시키려 할 것입니다.