Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在ruby中删除字符串开头和结尾的模式_Ruby On Rails_Ruby_String_Refactoring - Fatal编程技术网

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

Ruby on rails 在ruby中删除字符串开头和结尾的模式,ruby-on-rails,ruby,string,refactoring,Ruby On Rails,Ruby,String,Refactoring,因此,我发现自己需要在我正在处理的项目中删除字符串开头和结尾的标记。我做了一个快速的小方法,做了我需要它做的事情,但我不相信这是做这类事情的最佳方式。我想可能有一个方便的正则表达式,我可以用它在几行内完成。以下是我得到的: def remove_breaks(text) if text != nil and text != "" text.strip! index = text.rindex("<br />") whil

因此,我发现自己需要在我正在处理的项目中删除字符串开头和结尾的

标记。我做了一个快速的小方法,做了我需要它做的事情,但我不相信这是做这类事情的最佳方式。我想可能有一个方便的正则表达式,我可以用它在几行内完成。以下是我得到的:

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
def删除中断(文本)
如果文本!=零和文本!=""
text.strip!
index=text.rindex(“
”) 而索引!=nil和index==text.length-6 text=text[0,text.length-6] text.strip! index=text.rindex(“
”) 结束 text.strip! index=text.index(“
”) 而索引!=nil和index==0 text=测试[6,text.length] text.strip! index=text.index(“
”) 结束 结束 返回文本 结束
现在,

实际上可以是任何东西,而创建一个通用函数,将需要从头到尾剥离的字符串作为参数,可能会更有用


我愿意接受任何关于如何使它更干净的建议,因为这似乎是可以改进的。

使用替换方法

str.replace("<br/>", "")
str.replace(“
,”)
gsub可以采用正则表达式:

text.gsub!(/(<br \/>\s*)*$/, '')
text.gsub!(/^(\s*<br \/>)*/, '')
text.strip!
text.gsub!(/(\s*)*$/,“”)
text.gsub!(/^(\s*)*/,“”)
text.strip!
类字符串
把这个脱下来!(t)
#删除t的前导和尾随引用
#从字符串开始,加上周围的空格。
t=Regexp.escape(t)
附属的!(/^(\s*{t}\s*)+/x',)
附属的!(/(\s*{t}\s*)+$/x',)
结束
结束
#比如说。
str='


foo bar

str.把这个剥光!(“
”) p str#=>“foo-bar”
def删除中断(文本)
gsub((%r{^\s*
|
\s*$},) 结束

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

您可以使用
chomp!
slice!
方法。请参阅:

不幸的是,ruby的字符串替换不是那样工作的,根据replace,它只是用参数替换整个字符串。显然这不是我想要的。即使它确实是那样工作的,我也只需要替换“
”S在字符串的开头和结尾,但不触及中间的任何一个。例如“删除”(“
BR/> BR/>我想保持
这里所有的这些东西。
”应该返回“我想在这里保留所有这些东西。”如果你只想进行字符串操作,请使用regex和gsub,但更具体地说,如果你想对其他html标记进行操作,我建议使用解析器。Nokogiri可能是ruby的最佳选择。谢谢!这最适合我现在需要的。fgb的答案比我尝试的要好一些。扩展字符串r我在整个Rails应用程序中只在两个地方使用的东西似乎有点多。然而,这绝对是一个非常好的通用解决方案,我可以确定我将来会使用它。很遗憾,我不能将两个答案标记为正确,因为这真的很酷。
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'
def remove_breaks(text)
  text.gsub((%r{^\s*<br />|<br />\s*$}, '')
end