String 자료형을 다루기 위한 좋은 방법 중 하나로 정규표현식이라는 것이 있다.

본 프로젝트에서 사용된 크롤러에서도 들어가 있는 내용 중 하나로, 한번 만들어두면 계속해서 사용할 수 있기 때문에 이 곳에 적어두도록 한다.

%s는 지우고 싶은 태그명을 넣어두면 된다. 방법에 따라 분류하도록 한다.

1. html의 태그를 지울때 내용까지 지우는 방식이다. 예를들어 <script>asd</script> 로 되어 있다면, asd까지 모두 지우게 된다. 이러한 것은 html문서 중 내용으로써, 쓸모없는 부분인 script나 style태그 등 뷰의 값을 지정해둔 부분을 모두 지워버리기에 유용하다.

<( )*%s([^>])*?> -> <%s>로 치환

<( )*(/)( )*?%s()*> -> </%s>로 치환

 

--> 여기까지 태그안의 내용이 있는 부분을 모두 지우고, 태그만으로 남길수 있다. 예를 들면, <style weight = ...........>로 되어있다면, <style>로 변환한다.

 

(<%s>)([^(<%s>\.</%s>)])*?(</%s>) 는 공백으로 치환

(<%s>)[\s\S]*?(</%s>) 역시 공백으로 치환

 

2. html의 태그를 지울때 태그만 지우는 방식이다.  <script>asd</script> 로 되어 있다면, asd만 남기게 된다.

<( )*%s([^>])*?> -> <%s>로 치환

<( )*(/)( )*?%s()*> -> </%s>로 치환

 

태그를 정규화후, 해당 태그만을 지우면 된다. <%s>, </%s> 등으로 공백으로 삭제.

 

 

3. 기타 쓰레기 값 삭제 부분이다. 파싱을 하다보면, html태그가 아닌 이상한 value가 존재한다. 이런 것들은 휴리스틱하게 찾아보는 수밖에 없는 것 같다.


(&deg(;)|&lt(;)|&gt(;)|&quot(;)|&nbsp(;)|&amp(;)|&lsquo(;)

|&rsquo(;)|&#160(;)|&ldquo(;)|&rdquo(;)|&sdot(;))


를 공백으로 바꿔주면 된다.

 

 

4. 개행문자 삭제 부분이다.

(\\r){1,20}|(\\n){1,20}|(\\r\\n){1,20} {1,20}는 은 해당 그룹 (???)의 출현빈도에 따라서 적용할 수 있는 방법이다. 

 

5. 모든 태그를 지우는 방법은 다음과 같다.

<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>

 

남은 응용은 정규표현식과 관련된 내용을 찾아서 응용하길 바란다.


반응형
Posted by N'