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

4

所以我发现自己需要从项目中的字符串开头和结尾删除<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 />" 可能是任何东西,制作一个通用的函数来接收需要从开头和结尾剥离的字符串作为参数会更有用。我很乐意听取任何关于如何使代码更简洁的建议,因为这似乎可以改进。

2
如果您只是想进行字符串操作,请使用正则表达式和gsub,但更具体地说,如果您想在其他HTML标记中执行此操作,我建议使用解析器。http://nokogiri.org/ Nokogiri可能是Ruby中最好的选择。 - mpd
5个回答

10

gsub函数能够使用正则表达式:

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

谢谢!这正是我现在所需要的最合适的东西。 - seaneshbaugh

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'

fgb的回答对我正在尝试做的事情来说稍微好一些。为仅在整个Rails应用程序中使用两次的东西扩展String似乎有点过了。但是,这绝对是一个非常好的通用解决方案,我可以告诉你我将来会使用它。很遗憾我不能标记两个答案为正确,因为这真的很酷。 - seaneshbaugh

2

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

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


-2
请使用替换方法代替。
str.replace("<br/>", "")

不幸的是,根据http://ruby-doc.org/core/classes/String.html#M000786,Ruby的字符串替换并不是这样工作的。replace只是用参数替换整个字符串。显然,这不是我想要的。即使它按照这种方式工作,我也需要仅替换字符串开头和结尾处的“<br />”,而不触及中间的任何内容。例如remove_breaks(“<br /> <br /> <br />我想保留<br />所有这里的东西。<br />”)应返回“我想保留<br />所有这里的东西。” - seaneshbaugh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接