Is there an easier way to get a match before a position in a string?

Discussion in 'Ruby' started by Michael W. Ryder, Jan 21, 2008.

  1. I am trying to find an easier way to split a string into printable
    lines. I could use the method of checking for a space using a loop and
    going back from the desired length or I could use the following:

    def strbrk(str, len)
    if str.length <= len
    return str.length
    end
    tmp = str[0...len].reverse
    x = tmp =~ / /
    if x == nil
    return -1
    else
    return len - x
    end
    end

    I could not find any way to get a regexp to search from the end of the
    string which would have eliminated the need to reverse the string.
     
    Michael W. Ryder, Jan 21, 2008
    #1
    1. Advertisements

  2. Michael W. Ryder

    George Guest

    str.rindex(/ /, len) ?
     
    George, Jan 21, 2008
    #2
    1. Advertisements

  3. Michael W. Ryder

    yermej Guest

    This should work:

    / [^ ]*$/

    It looks for one space, followed by 0 or more occurrences of anything
    besides a space, followed by the end of the string.
     
    yermej, Jan 21, 2008
    #3
  4. def str_break( str, len )
    str.size > len and str[0..len].rindex(' ') or str.size
    end



    str = "\
    I don't necessarily need code examples -- but if anyone has
    ideas for a best approach to specifying a line wrap width
    (breaking between words for lines no longer than a specific
    column width) for output from a Ruby script, I'd love to
    hear about it."

    X = 40
    puts str.gsub(/\n/," ").scan(/\S.{0,#{X-2}}\S(?=\s|$)|\S+/)
     
    William James, Jan 21, 2008
    #4
  5. This is much better than my solution, I missed rindex somehow.
     
    Michael W. Ryder, Jan 21, 2008
    #5
  6. William James wrote:
    ...
    Kaspar Schiess wrote text-reform (gem install text-reform)

    require 'text/reform'

    r = Text::Reform.new
    while line=gets
    puts r.format('['*40, line)
    end


    Here he says it does hyphenate:
    http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/
     
    Siep Korteling, Jan 21, 2008
    #6
  7. I did find one more "improvement" on your code after reading further on
    rindex.

    def str_break( str, len )
    str.size > len and str.rindex(' ', len) or str.size
    end

    It appears to work the same and give the same results but I am not sure
    if there was a reason for the way you did it that I missed.
    Thanks for the push in the right direction.
     
    Michael W. Ryder, Jan 21, 2008
    #7
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.