2009-09-02 4 views
2

Ruby를 사용하여 태그의 HTML 페이지를 정리하고 싶습니다. 원시 HTML을 가지고 있으며 태그 목록을 정의하고 싶습니다. [ '범위', '리', 'DIV'] 제가 가지고 태그 당 두 정규식Ruby 태그가 유창한 정규 표현식에

clean_text = raw.gsub(first_regex,' ').gsub(second_regex,' ')... 

는 (시작 및 종료) 그래서, 순차적으로 실행할 수 정규식 배열을 만들 .

프로그래밍 방식으로 태그 배열에서 정규식 배열을 미리 빌드 한 다음 유창한 패턴으로 실행하는 방법이 있습니까?

편집 : 실제로 두 가지 질문을 한 번에 받았습니다. 첫 번째는 태그 목록을 정규 표현식 목록으로 변환하는 것이고 두 번째는 정규 표현식 목록을 유창하게 호출하는 것입니다. 두 가지 질문에 답변 해 주셔서 감사합니다. 나는 다음 질문을 하나의 주제로 만들려고 노력할 것이다.

+3

당신이 적절한 xml/html 파서 (예 : nokogiri http://nokogiri.org/) 사용에 대한 생각? –

+0

글쎄, 적절한 xml/html 파서가 더 강력한 솔루션이지만, "텍스트 만"을 원한다. 문서의 정확한 구조를 매핑 할 필요가 없다는 대가로 다소 시끄러운 결과를 용인하고자한다. –

답변

2

이렇게하면 모든 태그를 제거하는 단일 정규식이 생성됩니다.

clean_text = raw.gsub(/<\/?(#{tags.join("|")})>/, '') 

그러나 현재는 간단한 태그 제거, (> "..."예를 들어 < A HREF =) 속성을 가진 태그를 지원하도록 개선해야한다 (예를 들어 < >)

+1

이것은 순진하게 향상시킬 것입니다 : /<\/?(#{tags.join("|"))[^>]*>/ - 어떤 속성 값에 '>' –

1

당신이 정규식에 태그를 설정하는 build_regex 방법이 가정이 그것을 수행해야합니다

tags = %w(span div li) 
clean_text = tags.inject(raw) {|text, tag| text.gsub build_regex(tag), ' ' } 

분사 호출이 블록의 다음 반복으로 각각 대체의 결과를 전달 효과를주는 각 gsub을 하나씩 문자열에서 실행하는 것.

관련 문제