Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > regex and lookahead to specific number of chars

Reply
Thread Tools

regex and lookahead to specific number of chars

 
 
Adam Akhtar
Guest
Posts: n/a
 
      02-25-2008
If I have a string such as
"I love ruby, i really do love ruby, oh yes i do blah blah blah"

and i want to insert an asterix at every 10th char whether its a
whitespace, digit whatever how do i go about it

i was trying

string.gsub!(/[.]{10}/, "*")

but it doesnt work

any hints???
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
F. Senault
Guest
Posts: n/a
 
      02-25-2008
Le 25 février à 21:28, Adam Akhtar a écrit :

> and i want to insert an asterix at every 10th char whether its a
> whitespace, digit whatever how do i go about it
>
> i was trying
>
> string.gsub!(/[.]{10}/, "*")


What about string.gsub!(/(.{9})./, '\1*') ?

Fred
--
I know how to hurt I know how to kill I know what to show
And what to conceal I know when to talk And I know when to touch
No one ever died from wanting too much
(Garbage, The World Is Not Enough)
 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      02-25-2008
On 25.02.2008 21:28, Adam Akhtar wrote:
> If I have a string such as
> "I love ruby, i really do love ruby, oh yes i do blah blah blah"
>
> and i want to insert an asterix at every 10th char whether its a
> whitespace, digit whatever how do i go about it
>
> i was trying
>
> string.gsub!(/[.]{10}/, "*")
>
> but it doesnt work
>
> any hints???


Remove the square brackets around the dot. The dot is meta only outside
of them.

Cheers

robert
 
Reply With Quote
 
Adam Akhtar
Guest
Posts: n/a
 
      02-27-2008

Thanks Fred and Robert for that.

I dont understand what the \1 does. I know if i remove it it removes all
the characters before the 10th and if i include it in keeps them. Why is
this?



--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Adam Akhtar
Guest
Posts: n/a
 
      02-27-2008
oh and a totally newb question but when i try to substitute the asterix
with a newline \n it just prints it instead of creating a newline, why
is that???

i wish there some regex exercises out there instead of the usual
tutorial only stuff.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mark Bush
Guest
Posts: n/a
 
      02-27-2008
Adam Akhtar wrote:

> I dont understand what the \1 does. I know if i remove it it removes all
> the characters before the 10th and if i include it in keeps them. Why is
> this?


When you put a regexp in round brackets, what it matches is remembered.
In a replacement string, you can then refer to them as \1, \2, etc.

> oh and a totally newb question but when i try to substitute the asterix
> with a newline \n it just prints it instead of creating a newline, why
> is that???


Since the replacement string is in single quotes, \n is not special so
represents the two characters \ and n. To get a newline, you need to
put \n in double quotes ("\n"). In double quotes, the backslash quotes
any character, so \1 would become the character with code 1. So in
double quotes, the \1 needs to be \\1 so:

string.gsub!(/(.{9})./, "\\1*")

for the original example and:

string.gsub!(/(.{9})./, "\\1\n")

for the newline example.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
F. Senault
Guest
Posts: n/a
 
      02-28-2008
Le 27 février à 23:40, Adam Akhtar a écrit :

> Thanks Fred and Robert for that.
>
> I dont understand what the \1 does. I know if i remove it it removes all
> the characters before the 10th and if i include it in keeps them. Why is
> this?


It's a reference to the first parenthesied group. To decompose the
expression :

( => begin group 1
.{9} => find exactly 9 characters
) => end group 1
. => followed by exactly one character

I replace that whole group by the first group (my 9 characters) and a
star.

There are best ways to do it (especially if you're manipulating very big
strings, I think), but I think it's the clearest.

Fred
--
Full-size scottish highland pipes are loud enough to fall into the
category of 'weaponry', especially if they're played poorly, but it's an
analogue of heavy metal if they're played well.
(Gary S. Callison in the SDM)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
python regex "negative lookahead assertions" problems Jelle Smet Python 2 11-23-2009 09:20 AM
Re: python regex "negative lookahead assertions" problems MRAB Python 0 11-22-2009 04:32 PM
Floats to chars and chars to floats Kosio C Programming 44 09-23-2005 09:49 AM
Negative lookahead regex clarification needed shifty Perl Misc 9 01-26-2005 03:57 PM
help: negative lookahead and backref in regex? stenor@bayarea.net Perl Misc 2 12-29-2004 12:13 AM



Advertisments