a="99[1,3-4,5]"

def process(key):
    i=keyfind('[')
    prefix=key[:i]
    chars=[]
    dash=False
    for c in key[i:]:
         if c=='-': dash=True
         elif '0123456789'.find(c)>=0:
              if not dash: chars.append(c)
              else:
                  for j in range(int(chars[-1])+1,int(c)+1):
chars.append(str(j))
                  dash=False
         else:
              dash=False
   return [prefix + code for code in chars]

print process(a)

On Jun 24, 4:15 pm, Kuba Kucharski <kuba.kuchar...@gmail.com> wrote:
> On Wed, Jun 24, 2009 at 9:46 PM, DenesL <denes1...@yahoo.ca> wrote:
>
> > On Jun 24, 1:21 pm, Kuba Kucharski <kuba.kuchar...@gmail.com> wrote:
> > > I have a string like this:
>
> > > 66[1,4-6,0]
>
> > > i want to generate upon this a list like that:
>
> > > 6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6640,6641,6642,6643,...
> > > 6650,6651...
> > > 6660,6661...
> > > 6600,6601,
>
> > I fail to see the generation pattern,
> > what does 66[1,4-6,0] mean?.
>
> this means 66X where X is 1 or 4 or 5 or 6 or 0
>
> 4th digit in my examples of generated strings may be misleading, so please,
> forget about it now.
>
> there is a string:
>  66[1,4-6,0]
> but it could be
>  254[2,3-6]
> or 2[3-5]
>
> what is in between brackets is 1 digit. in the first example it is:
> 1,0 - that is clear I suppose?
> 4-6 - which means 4,5,6
>
> also something like:
> 2-8 - means 2,3,4,5,6,7,8
>
> So I have to generate every possible number that fits this "regexp"
>
> for 99[2,3] it will be:
> 992, 993
>
> for 99[2-4]
> it will be 992,993,994
>
> for 99[1,3,6-8]
> it will be 991,993,996,997,998
>
> Is it clear now?
>
> I am parsing some "xls" goverment data.. exactly telephone prefixes tables..
> I may know the work-around but.. I wonder if there is an elegant solution in
> python for this. All I can think of is spliting strings, matching for "-",
> spliting again.. generate list in loops.. This works, but looks ugly.
>
> Purpose? :
>
> I need to do some matching outside the telephony software(asterisk). I(my
> function) get the number, like:
>
> 992334432 and I need to match this number to a operator going through
> prefixes...
> in the goverment data I have a lot of lines like that one:
>
> Netia: SPQ=71(1,3-0), SPQ=70(1-3), SP=3(1-3), SPQ=35(1,2,4-6,8,9),
> SP=4(4-6), SPQ=41(1,3,7,0), SPQ=43(1-4,6-0), SPQM=390(5-0), SP=27,
> SPQ=47(9,0), SPQM=3880
>
> Where "Netia" is an operator name.
>
> So you see... :) I don't expect people to understand my problems ;)
>
> Thx for your time.
>
> --
> Kuba
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to