[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Help with regexp and gsub

jackster the jackle

11/28/2008 3:14:00 PM

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
--
Posted via http://www.ruby-....

2 Answers

Stefano Crocco

11/28/2008 3:39:00 PM

0

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

Robert Dober

11/28/2008 3:39:00 PM

0

On Fri, Nov 28, 2008 at 4:13 PM, jackster the jackle
<johnsheahan@sflistdb.com> wrote:
> 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
> --
> Posted via http://www.ruby-....
>
>
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 ;)