Help with regexp and gsub

  • Thread starter jackster the jackle
  • Start date
J

jackster the jackle

I need to be able to match all data before the word "Total:" and then I
will replace it with "" using gsub.

Here is the text:

C
THIS IS THE TEXT I WANT TO MATCH ON
and this.....
and this too...
and there could be this line too but the following line is always there.
Total:
But I need to keep
all text after
the text "Total:"


I was thinking that I would somehow use a regexp index but I'm not sure
how to do it.

thanks
jackster
 
S

Stefano Crocco

Alle Friday 28 November 2008, jackster the jackle ha scritto:
I need to be able to match all data before the word "Total:" and then I
will replace it with "" using gsub.

Here is the text:

C
THIS IS THE TEXT I WANT TO MATCH ON
and this.....
and this too...
and there could be this line too but the following line is always there.
Total:
But I need to keep
all text after
the text "Total:"


I was thinking that I would somehow use a regexp index but I'm not sure
how to do it.

thanks
jackster

This should work:

str = <<EOS
line1
line2
line3
Total: text
line4
EOS
new_str = str.sub(/.*^Total:/m,'')

Note the m after the closing slash of the regexp. It means that the regexp is
multiline, that is it means that newline characters (\n) should be treated as
any other character (in particular, the dot will also match them).

I hope this helps

Stefano
 
R

Robert Dober

I need to be able to match all data before the word "Total:" and then I
will replace it with "" using gsub.

Here is the text:

C
THIS IS THE TEXT I WANT TO MATCH ON
and this.....
and this too...
and there could be this line too but the following line is always there.
Total:
But I need to keep
all text after
the text "Total:"


I was thinking that I would somehow use a regexp index but I'm not sure
how to do it.

thanks
jackster
I would read the lines into an array or split the string by /\r?\n/

then the following (might be slow for long texts) should do the trick

text.split( /\r?\n/).inject(""){ ...
or
lines.inject(""){
|text, line|
if ! trigger.empty? || /^Total/ =3D=3D=3D line then ## (1)
text << line.chomp << "\n"
else
""
end
}

In case you do not want the line containing Total replace the if with
the following

if text.empty?
/^Total/ =3D=3D=3D line ? "x" : ""
else
text << line.chomp << "\n"
end
}[2..-1]

HTH
Robert
(1) You are absolutely right Charles I tried this with unless...else,
laughably unreadable

--=20
Ne baisse jamais la t=EAte, tu ne verrais plus les =E9toiles.

Robert Dober ;)
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,154
Members
46,702
Latest member
LukasConde

Latest Threads

Top