#!/usr/bin/python import re from sys import argv, stderr, exit def expand(pat): p = re.compile('\[([^\]]*)[\]]') m = p.search(pat) if m is None: p = re.compile(r'\(([^)]+)\)') m = p.search(pat) if m is None: return [pat] a = m.groups()[0].split('|') else: a = m.groups()[0] (s1,s2)=m.span() pre = pat[:s1] it = pat[s1:s2] post = pat[s2:] ret = [] for p in expand(post): for e in a: ret.append(pre+e+p) return ret if __name__ == "__main__": if len(argv) != 2: stderr.write("Syntax: %s \n" % argv[0]) exit(1) no = 1 for seq in expand(argv[1]): print '> seq no %d' % no print seq no += 1