[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Regular Expression Trouble

Chris Hoeppner

12/26/2008 4:41:00 PM

Hey!

I'm writing a little script to rename files with weird names but common
bits to a common format. Here's the regular expression I use to extract
the common data:

/.*s?(\d?\d)x?e?(\d\d).*\.(\w{3})$/i

It's meant to rename TV Show files, both video and subtitles. I'm having
trouble making it match the first group however. One of the digits
should be optional, so I stuffed a ? sign there. However, it only
matches one digit, leaving strings like 12x14 with captures ["2", "14"].

I'm not quite sure if there's anything wrong with my expression there,
but I'd swear it's the way to do it. Maybe you're able to see something
I'm looking past.

Thanks!
--
Posted via http://www.ruby-....

4 Answers

Dave Thomas

12/26/2008 4:56:00 PM

0


On Dec 26, 2008, at 10:41 AM, Chris Hoeppner wrote:

>
> /.*s?(\d?\d)x?e?(\d\d).*\.(\w{3})$/i
>
> It's meant to rename TV Show files, both video and subtitles. I'm =20
> having
> trouble making it match the first group however. One of the digits
> should be optional, so I stuffed a ? sign there. However, it only
> matches one digit, leaving strings like 12x14 with captures ["2", =20
> "14"].

Your problem is that .* is swallowing as many characters as it can. In =20=

this case, it is swallowing up to and including the '1'. It then =20
stops, because you've said you need at least one digit before the 'x', =20=

and that's the second \d.

If you change it around to

/.*(\d\d?)x/

it should work. Note that I've also removed the s?, as that can never =20=

actually be used=97the .* will swallow the 's'.


Regards


Dave Thomas=

Tim Greer

12/26/2008 5:22:00 PM

0

Chris Hoeppner wrote:

> Hey!
>
> I'm writing a little script to rename files with weird names but
> common bits to a common format. Here's the regular expression I use to
> extract the common data:
>
> /.*s?(\d?\d)x?e?(\d\d).*\.(\w{3})$/i
>
> It's meant to rename TV Show files, both video and subtitles. I'm
> having trouble making it match the first group however. One of the
> digits should be optional, so I stuffed a ? sign there. However, it
> only matches one digit, leaving strings like 12x14 with captures ["2",
> "14"].
>
> I'm not quite sure if there's anything wrong with my expression there,
> but I'd swear it's the way to do it. Maybe you're able to see
> something I'm looking past.
>
> Thanks!

..* should probably be set to non greedy .*?, so it doesn't grab things
you don't want.

/.*?s?(\d?\d)x?e?(\d\d).*?\.(\w{3})$/i

What exactly does the data you're pulling the digits and 3 letter file
extension from look like?
--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!

Magnus Erickson

12/26/2008 5:39:00 PM

0

Howdy!

I've used www.rubular.com when fiddling around with Ruby regular expression=
s.
It will show matches in real time as you type on an arbitrary text. It help=
ed me a lot.

Magnus

________________________________________
Fr=E5n: chris.webstar@gmail.com [chris.webstar@gmail.com]
Skickat: den 26 december 2008 17:41
Till: ruby-talk ML
=C4mne: Regular Expression Trouble

Hey!

I'm writing a little script to rename files with weird names but common
bits to a common format. Here's the regular expression I use to extract
the common data:

/.*s?(\d?\d)x?e?(\d\d).*\.(\w{3})$/i

It's meant to rename TV Show files, both video and subtitles. I'm having
trouble making it match the first group however. One of the digits
should be optional, so I stuffed a ? sign there. However, it only
matches one digit, leaving strings like 12x14 with captures ["2", "14"].

I'm not quite sure if there's anything wrong with my expression there,
but I'd swear it's the way to do it. Maybe you're able to see something
I'm looking past.

Thanks!
--
Posted via http://www.ruby-....

Chris Hoeppner

12/29/2008 10:00:00 AM

0

Tim Greer wrote:
>
> .* should probably be set to non greedy .*?, so it doesn't grab things
> you don't want.
>
> /.*?s?(\d?\d)x?e?(\d\d).*?\.(\w{3})$/i
>

This one actually worked. I tried non-greedies all over, but there.
Thanks!!

And thanks also for the hint at rubular. It's awesome.
--
Posted via http://www.ruby-....