Удаление шаблона из начала и конца строки в ruby - PullRequest
3 голосов
/ 30 апреля 2010

Так что я обнаружил, что мне нужно удалить теги <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 ]

7 голосов
/ 30 апреля 2010

gsub может принимать регулярное выражение:

text.gsub!(/(<br \/>\s*)*$/, '')
text.gsub!(/^(\s*<br \/>)*/, '')
text.strip!
3 голосов
/ 30 апреля 2010
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 голосов
/ 05 ноября 2014

Вы можете использовать chomp! и slice! методы. Увидеть: http://ruby -doc.org / ядро-1.8.7 / String.html

1 голос
/ 30 апреля 2010
def remove_breaks(text)
  text.gsub((%r{^\s*<br />|<br />\s*$}, '')
end

%r{...} - это еще один способ указать регулярное выражение. Преимущество% r в том, что вы можете выбрать свой собственный разделитель. Использование {} для разделителей означает отсутствие необходимости экранировать /'s.

0 голосов
/ 30 апреля 2010

используйте метод замены

str.replace("<br/>", "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...