2011-08-16 4 views
-1

내가루비 문자열 지수는 같은

 &lt;em&gt;&lt;/em&gt;">Markov, Andrei</a> 

그리고 아래의 출력에 따라, 인덱스가 여기에

Markov, Andrei 
Markov, Andrei</a> 

은 항상 같은 동작하지 않는 아래 라인을 구문 분석 동작하지 않습니다 내 코드

line_list.each do |line| 
    if line.include? name 
     start = line.index('>') + 1 
     finish = line.index('<', start) - 1 
     elem = line[start,finish] 

     puts line 
     for i in(start..finish) 
      print line[i] 
     end 
     puts 
     puts elem 
     puts 
    end 
end 
+0

이 사이트에 유래에 여기에 질문을 게시하기 전에 먼저 (즉 루비 문서를) 공식 문서화를 확인하는 사람들을 격려 코드입니다. 감사합니다 :) – mikong

답변

4

이 수행 할 때

인덱스 start에서 finish으로 갈 것입니다. 당신은 인덱스 start에서 시작하여 다음 색인 finish로하지 않을, finish 문자를 받고있어

elem = line[start,finish] 

: 당신은이 말을합니다. fine manual에서

:

하나의 Fixnum을 통과하면, 그 위치에 한 문자의 문자열을 반환합니다. 두 개의 Fixnum 객체를 전달한 경우 첫 번째 오프셋에서 시작하여 두 번째 문자열에서 지정된 길이만큼 부분 문자열을 반환합니다.

+0

대답은 : line [start..finish] – DjAlan

+0

@DjAlan : 왜 나는'line [start, finish]'와'for i in (start..finish) i]; 결과가 달라진다. –

-2

대신 정규 표현식을 사용해야합니다. http://www.ruby-doc.org/core/classes/Regexp.html

UPDATE 여기

line_list.each do |line| 
    elem = line.match(/<a[^>]*>(.*)<\/a>/)[1] 
end 
+2

정규식을 사용해야하는 이유를 설명해 주시겠습니까? –

+0

문자열에서 패턴을 추출하려면 휠을 다시 만들고 질문지 코드를 12 개 작성해야하는 이유 (한 클리너에서 쉽게 수행 할 수 있음) 이야기의 도덕은 질문을하는 사람을 교육하려고 시도하지 마십시오. 당신은 싫어합니다. – Blacksad

+2

이야기의 도덕은 권고에 대한 근거를 제공합니다. 간단한 문장과 링크를 버리기보다는 일부 샘플 코드를 사용하십시오. –