2010-04-30 5 views
3

그래서 나는 자신이 작업중인 프로젝트의 문자열의 처음과 끝에서 <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

문자열 조작을 찾으려면 regex와 gsub를 사용하십시오. 그러나 다른 html 태그와 함께이 작업을 수행하려는 경우 좀더 구체적으로 말하면 저는 파서를 권장합니다. http://nokogiri.org/ Nokogiri는 아마도 루비를위한 최선일 것입니다. – mpd

답변

7

GSUB는 정규 표현식을 수행 할 수 있습니다

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

감사! 이것은 내가 지금 필요한 것에 가장 적합합니다. – seaneshbaugh

-1

사용 대체 방법 대신

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

불행히도 ruby의 문자열 replace는 그런 식으로 작동하지 않습니다. http://ruby-doc.org/core/classes/String.html#M000786 replace는 전체 문자열을 인수가 무엇이든간에 바꿉니다. 분명히 그것은 내가 원하는 것이 아닙니다. 그런 식으로 작동하더라도 문자열의 처음과 끝에 "
"을 바꿔야하지만 중간에있는 것은 건드리지 않아야합니다. 예를 들어 remove_breaks는 ("


나는 여기에이 물건을 모두
을 유지하려는.
") 가 가 반환해야 "내가 여기에이 물건을 모두
을 유지하고 싶다." – 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' 
+0

fgb의 대답은 내가하려는 일에 약간 더 좋습니다. 전체 Rails 앱에서 두 곳에서만 사용하는 무언가를 위해 문자열을 확장하는 것이 약간은 보인다. 그러나 이것은 확실히 좋은 범용 솔루션이며 앞으로도 계속 사용할 것이라고 말할 수 있습니다. 정말 냉소적이기 때문에 두 개의 대답을 옳다고 표시 할 수없는 것은 부끄러운 일입니다. – seaneshbaugh

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

%r{...} 정규 표현식을 지정하는 또 다른 방법입니다. % r의 장점은 자신의 delimeter를 고를 수 있다는 것입니다. 구분 기호로 {}을 사용하면 /를 이스케이프하지 않아도됩니다.

관련 문제