0

Taken reference Why doesn't [01-12] range work as expected?

 m = re.search(r"(\w+)\[([0-9]+)\:([0-9]+)\]", DUNESX[01:44])

or

m = re.search(r"(\w+)\[(0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9])\:([0-9]+)\]", DUNESX[01:44])

or

m = re.search(r"(\w+)\[(0?[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9])\:([0-9]+)\]", DUNESX[01:44])

or

m = re.search(r"(\w+)\[([0-1][0-9]+)\:([0-9]+)\]", DUNESX[01:44])

But output from above expressions are

['DUNESX1', 'DUNESX2', 'DUNESX3', 'DUNESX4', 'DUNESX5', 'DUNESX6', 'DUNESX7', 'DUNESX8', 'DUNESX9', 'DUNESX10', 'DUNESX11', 'DUNESX12', 'DUNESX13', 'DUNESX14', 'DUNESX15', 'DUNESX16', 'DUNESX17', 'DUNESX18', 'DUNESX19', 'DUNESX20', 'DUNESX21', 'DUNESX22', 'DUNESX23', 'DUNESX24', 'DUNESX25', 'DUNESX26', 'DUNESX27', 'DUNESX28', 'DUNESX29', 'DUNESX30', 'DUNESX31', 'DUNESX32', 'DUNESX33', 'DUNESX34', 'DUNESX35', 'DUNESX36', 'DUNESX37', 'DUNESX38', 'DUNESX39', 'DUNESX40', 'DUNESX41', 'DUNESX42', 'DUNESX43', 'DUNESX44']

Doesn't provide desired output like

['DUNESX01', 'DUNESX02', 'DUNESX03', 'DUNESX04', 'DUNESX05', 'DUNESX06', 'DUNESX07', 'DUNESX08', 'DUNESX09', 'DUNESX10', 'DUNESX11', 'DUNESX12', 'DUNESX13', 'DUNESX14', 'DUNESX15', 'DUNESX16', 'DUNESX17', 'DUNESX18', 'DUNESX19', 'DUNESX20', 'DUNESX21', 'DUNESX22', 'DUNESX23', 'DUNESX24', 'DUNESX25', 'DUNESX26', 'DUNESX27', 'DUNESX28', 'DUNESX29', 'DUNESX30', 'DUNESX31', 'DUNESX32', 'DUNESX33', 'DUNESX34', 'DUNESX35', 'DUNESX36', 'DUNESX37', 'DUNESX38', 'DUNESX39', 'DUNESX40', 'DUNESX41', 'DUNESX42', 'DUNESX43', 'DUNESX44']

Complete code is

import re 

group_list = ['DUNESX[01:44]']
host_list = getgrandchild(group_list)

def getgrandchild(child):
    nodelist = []
    if child is None:
        return
    for nodes in child:
        print(nodes)
        if re.match(r".*(\[[0-1][0-9]+\:[0-9]+\])", nodes):
            m = re.search(r"(\w+)\[([0-9]+)\:([0-9]+)\]", nodes)
            lb = int(m.group(2))
            ub = int(m.group(3))
            for i in range(lb, ub+1):
                nodelist.append(m.group(1)+str(i))
        elif re.match(r"(\w+)", nodes):
            m = re.search(r"(\w+)", nodes)
            nodelist.append(m.group(1))
  • 7
    What is DUNESX[01:44]??? – Joshua Varghese May 20 '20 at 06:39
  • gst = ['DUNESX[01:44]'] host_list = getgrandchild(gst) def getgrandchild(child): nodelist = [] if child is None: return for nodes in child: print(nodes) if re.match(r".*(\[[0-1][0-9]+\:[0-9]+\])", nodes): m = re.search(r"(\w+)\[([0-9]+)\:([0-9]+)\]", nodes) lb = int(m.group(2)) ub = int(m.group(3)) for i in range(lb, ub+1): nodelist.append(m.group(1)+str(i)) elif re.match(r"(\w+)", nodes): m = re.search(r"(\w+)", nodes) nodelist.append(m.group(1)) – Pawan Kumar May 20 '20 at 07:00
  • 1
    Could you edit your qeustion with that code added pls? – Joshua Varghese May 20 '20 at 07:01

1 Answers1

0

I think I understand what you are trying to do. Here is a code that helps:

def getgrandchild(child):
    nodelist = []
    for nodes in child:
        m = re.search("(\w+)\[([0-9]+)\:([0-9]+)\]",nodes)
        for i in range(int(m.group(2)),int(m.group(3))+1):
            nodelist.append(m.group(1)+str(i).zfill(len(m.group(2))))
    return nodelist

You can see i've skipped some steps, but you can have them. I've focused on the main part.
We use zfill to add numbers of the form '001' or '01', which is explained here. So, for this code, if you give:

getgrandchild(['DUNESX[01:44]'])

you get:

['DUNESX01', 'DUNESX02', 'DUNESX03', 'DUNESX04', 'DUNESX05', 'DUNESX06', 'DUNESX07', 'DUNESX08', 'DUNESX09', 'DUNESX10', 'DUNESX11', 'DUNESX12', 'DUNESX13', 'DUNESX14', 'DUNESX15', 'DUNESX16', 'DUNESX17', 'DUNESX18', 'DUNESX19', 'DUNESX20', 'DUNESX21', 'DUNESX22', 'DUNESX23', 'DUNESX24', 'DUNESX25', 'DUNESX26', 'DUNESX27', 'DUNESX28', 'DUNESX29', 'DUNESX30', 'DUNESX31', 'DUNESX32', 'DUNESX33', 'DUNESX34', 'DUNESX35', 'DUNESX36', 'DUNESX37', 'DUNESX38', 'DUNESX39', 'DUNESX40', 'DUNESX41', 'DUNESX42', 'DUNESX43', 'DUNESX44']

Also, if you give:

getgrandchild(['PYTHON[001:025]'])

you get:

['PYTHON001', 'PYTHON002', 'PYTHON003', 'PYTHON004', 'PYTHON005', 'PYTHON006', 'PYTHON007', 'PYTHON008', 'PYTHON009', 'PYTHON010', 'PYTHON011', 'PYTHON012', 'PYTHON013', 'PYTHON014', 'PYTHON015', 'PYTHON016', 'PYTHON017', 'PYTHON018', 'PYTHON019', 'PYTHON020', 'PYTHON021', 'PYTHON022', 'PYTHON023', 'PYTHON024', 'PYTHON025']
Joshua Varghese
  • 5,082
  • 1
  • 13
  • 34
  • Thanks Joshua , for quickly figuring out & providing best solution .Appreciate your endeavors .Finally this is not regex issue ,the issue is with interpretation of '0' on left side of digits . – Pawan Kumar May 20 '20 at 13:44