从ruby中的字符串的开头和结尾删除模式

时间:2010-04-30 09:35:51

标签: ruby-on-rails ruby string refactoring

所以我发现自己需要从我正在处理的项目中的字符串的开头和结尾删除<br />标签。我做了一个快速的小方法来完成我需要做的事情,但我不相信这是做这类事情的最好方法。我怀疑可能有一个方便的正则表达式,我可以用它来做几行。这就是我得到的:

def remove_breaks(text)  
    if text != nil and text != ""
        text.strip!

        index = text.rindex("<br />")

        while index != nil and index == text.length - 6
            text = text[0, text.length - 6]

            text.strip!

            index = text.rindex("<br />")
        end

        text.strip!

        index = text.index("<br />")

        while index != nil and index == 0
            text = test[6, text.length]

            text.strip!

            index = text.index("<br />")
        end
    end

    return text
end

现在"<br />"实际上可以是任何东西,并且制作一个通用的函数可能更有用,该函数将需要从开头和结尾剥离的字符串作为参数。

我愿意接受有关如何使其更清洁的任何建议,因为这似乎可以改进。

5 个答案:

答案 0 :(得分:7)

gsub可以采用正则表达式:

text.gsub!(/(<br \/>\s*)*$/, '')
text.gsub!(/^(\s*<br \/>)*/, '')
text.strip!

答案 1 :(得分:3)

class String
    def strip_this!(t)
        # Removes leading and trailing occurrences of t
        # from the string, plus surrounding whitespace.
        t = Regexp.escape(t)
        sub!(/^(\s* #{t} \s*)+  /x, '')
        sub!(/ (\s* #{t} \s*)+ $/x, '')
    end
end

# For example.
str = ' <br /> <br /><br />    foo bar <br />    <br />   '
str.strip_this!('<br />')
p str                     # => 'foo bar'

答案 2 :(得分:2)

您可以使用chomp!slice!方法。看到: http://ruby-doc.org/core-1.8.7/String.html

答案 3 :(得分:1)

def remove_breaks(text)
  text.gsub((%r{^\s*<br />|<br />\s*$}, '')
end

%r{...}是另一种指定正则表达式的方法。 %r的优点是你可以选择自己的分隔符。使用{}作为分隔符意味着不必转义/。

答案 4 :(得分:-2)

使用替换方法

str.replace("<br/>", "")