--000e0cd1066af11cd80482ffa3b2 Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 29, 2010 at 8:41 PM, Jesse B. <jessebos / aol.com> wrote: > How would I find the number of spaces at the beginning of a line before > the occurrance of the first non-space character? > > Would the best method be to use a regular expression that covers all > non-space characters and get the index of the first occurrance of that? > -- > Posted via http://www.ruby-forum.com/. > > Hi, a quick appraisal of the issues with previous solutions. This solution counts non-leading spaces i " hello ".chars.to_a.each do |c| i+if( c " " ) end This one returns nil if there is not text after the leading whitespaces. str /\S/ Each of these count non-space whitespaces (ie " \t hello" would be 3 instead of 1 ) s.index(%r{\S}) str[/\A\s*/].length s /(\s*)/ $1.length So here is a quick suite you can use to test the solutions, along with a solution which passes. If this suite doesn't accurately reflect what you were trying to do, modify it and re-post :) You'll be a lot more likely to get a solution which does explicitly what you are looking for, and maybe find some areas that are ambiguous in your question, such as multi-line strings, and strings with mixtures of whitespace types. require 'test/unit' def leading_spaces( str ) # fill this out however you like, my solution is: str /[^ ]/ || str.length end class TestLeadingSpaces < Test::Unit::TestCase def test_one_space assert_equal 1 , leading_spaces(' ') end def test_empty_string assert_equal 0 , leading_spaces('') end def test_two_leading_spaces assert_equal 2 , leading_spaces(' hello') end def test_no_spaces assert_equal 0 , leading_spaces('hello') end def test_spaces_inside_but_not_leading assert_equal 0 , leading_spaces('hello there') end def test_spaces_inside_and_leading assert_equal 2 , leading_spaces(' hello there') end def test_trailing_spaces_not_leading assert_equal 0 , leading_spaces('hello ') end def test_trailing_spaces_and_inside assert_equal 0 , leading_spaces('hello there ') end def test_spaces_everywhere assert_equal 1 , leading_spaces(' hello there ') end def test_mixture_of_spaces_and_tabs assert_equal 1 , leading_spaces(" \t hello") end # the following are not really defined in the question, this is what I think the OP is asking for # might also be asking for an array listing the indentions for each line? def multi_line_spaces assert_equal 6 , leading_spaces(<<-MULTI_LINE_STRING) this is six spaces this is eight MULTI_LINE_STRING end end --000e0cd1066af11cd80482ffa3b2--