2010-05-16 3 views
1

나는 밖으로 "274.20p"을 얻을 필요가 :Ruby 정규식 - 행의 중간과 끝을 확인 하시겠습니까?

<td class="dataRegularUlOn" > 

그래서 뭔가 같은 :

/<td(.*?)class="dataRegularUlOn"(.*?)>/ 

나 '

<td nowrap="nowrap" class="dataRegularUlOn" style="text-align: right;">274.20p</td> 

나는에 정규 표현식을하고 싶습니다 리눅스에서 루비를 사용하고 있습니다. 대신 http://github.com/whymirror/hpricot 같은 것을 사용하고 그냥 값을 검색 할 요소에 XPath를 사용할 수없는 이유는

thks

+0

A "루비 HTML 파서"더이 작업에 적용 할 수 있습니다 http://ruby-toolbox.com/categories/html_parsing.html – VonC

+0

필수 크 툴후를 링크 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

답변

0

이 정규 표현식을보십시오 :

/<td[^>]*class="dataRegularUlOn"[^>]*>([^<]*)<\/td>/ 
+0

이것은 끝 비트에서 분할하는 것보다 낫습니다. 많이 있습니다. – Steven

0

.

+0

위와 동일한 문제 : p는 보석 atm을 사용할 수 없습니다.) don; t 설치 – Steven

0

html 파일을 구문 분석합니까? XPath를 사용해야한다고 생각합니다. 정말 사용하기 쉽습니다. 루비에게는 Nokogiri가 있습니다.

정규 표현식을 사용하여, 나는 다음과 같이 할 것 :

ruby_sub_string = /.*[\d]+\.[\d]{1,2}p(.*)/.match(my_string) 
ruby_sub_string[1] 

이 트릭을 할해야합니다. 나는 그것을 지금 rigth 시도 할 수 없다.

1

왜 이미 완벽하게 사용할 수있는 HTML 파서가 충분할 때 자신의 HTML 파서를 작성하고 싶습니까?

require 'nokogiri' 

doc = Nokogiri::HTML(' 
    <td nowrap="nowrap" class="dataRegularUlOn" style="text-align: right;"> 
     274.20p 
    </td>') 

p doc.search('.dataRegularUlOn').map(&:text) 
# => ["272.20p"] 
+0

이것은 완벽한 방법이지만 uni에서는 보석을 설치할 수 없습니다 ... ... ( – Steven

+0

@Steven : 정말요? 홈 디렉토리 안에 있지 않습니까? 환경 변수'GEM_HOME'과'GEM_PATH'는 당신의'$ HOME' 디렉토리를 가리 킵니다. 사실,'gem install'을 호출하고 시스템 디렉토리에 쓸 수 없다는 것을 감지하면 실제로 자동적으로 홈 디렉토리로 돌아갑니다. 어쨌든, 제 3 자 라이브러리가 필요없는 stdlib에있는 많은 HTML 문서들, 즉'REXML' ('require 'rexml'')을 파싱 할 수있는 방대한 XML 라이브러리가 있습니다. –

+0

@Steven : 또한 실제로 보석을 설치하지 않아도됩니다. '$ HOME' 디렉토리 어딘가에 직접 파일을 설치하고 그 디렉토리를 Ruby의'$ LOAD_PATH'에 추가 할 수도 있습니다. –

관련 문제