Ruby字符串索引的行为不一样

时间:2011-08-16 03:16:38

标签: ruby

我解析下面的行

        &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

2 个答案:

答案 0 :(得分:4)

执行此操作时:

for i in(start..finish)
    print line[i]
end

您将从索引start转到finish。当你这样说:

elem = line[start,finish]

您从索引start开始,然后获取finish个字符,而不是索引finish

来自fine manual

  

如果传递单个Fixnum,则返回该位置的一个字符的子字符串。如果传递了两个Fixnum个对象,则返回从第一个给定的偏移量开始的子字符串,以及第二个给出的长度。

答案 1 :(得分:-2)

你应该使用正则表达式! http://www.ruby-doc.org/core/classes/Regexp.html

更新这里是代码

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