import re
text = """System Id Interface Circuit Id State HoldTime Type PRI
--------------------------------------------------------------------------------
rtr1.lab01.some GE0/0/1 0000000001 Up 22s L2 --
thing
rtr2.lab01.some GE0/0/2 0000000002 Up 24s L2 --
thingelse
rtr2.lab01.abcd GE0/0/4 0000000003 Up 24s L2 --
rtr2.lab01.none GE0/0/24 0000000004 Up 24s L2 --
sense
rtr2.lab01.efgh GE0/0/5 0000000003 Up 24s L2 --
"""
lines = text.rstrip().split('\n')[2:]
n_lines = len(lines)
current_line = -1
def get_next_line():
# Actual implementation would be reading from a file and yielding lines one line at a time
global n_lines, current_line, lines
current_line += 1
# return special sentinel if "end of file"
return lines[current_line] if current_line < n_lines else '$'
def get_system_id():
line = None
while line != '$': # loop until end of file
if line is None: # no current line
line = get_next_line()
if line == '$': # end of file
return
m = re.search(r'^([a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9])', line)
id = m[1]
line = get_next_line() # might be sentinel
if line != '$' and re.match(r'^[a-zA-Z0-9]+$', line): # next line just single id?
id += line
line = None # will need new line
yield id
for id in get_system_id():
print(id)