123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- # hiermatch - Doing match on a list of string or a hierarchy.
- # Written by Chris Lawrence <lawrencc@debian.org>
- # Copyright (C) 1999-2008 Chris Lawrence
- # Copyright (C) 2008-2016 Sandro Tosi <morph@debian.org>
- import re
- import exceptions
- def egrep_list(strlist, pattern_str, subindex=None):
- """Use the pattern_str to find any match in a list of strings."""
- """Return: a list of index for the matchs into the origin list."""
- if strlist is None:
- return None
- try:
- pat = re.compile(pattern_str, re.I | re.M)
- except:
- raise exceptions.InvalidRegex
- resultlist = []
- if subindex is None:
- subindex = range(len(strlist))
- for i in subindex:
- if pat.search(strlist[i]):
- resultlist.append(i)
- return resultlist
- def egrep_hierarchy(hier, pattern_str, subhier=None, nth=1):
- """Grep the nth item of a hierarchy [(x, [a, b]),...]."""
- """Return a subhier like [[n, m],[],...], n, m string index."""
- resulthier = []
- for i in range(len(hier)):
- if subhier:
- if subhier[i]: # Only if have something to match.
- resultlist = egrep_list(hier[i][nth], pattern_str, subhier[i])
- else:
- resultlist = []
- else:
- resultlist = egrep_list(hier[i][nth], pattern_str)
- resulthier.append(resultlist)
- return resulthier
- def matched_hierarchy(hier, pattern_str):
- """Actually create a new hierarchy from a pattern matching."""
- mhier = []
- result = egrep_hierarchy(hier, pattern_str)
- for i in range(len(result)):
- if result[i]:
- item = [hier[i][1][y] for y in result[i]]
- mhier.append((hier[i][0], item))
- return mhier
- # vim:ts=8:sw=4:expandtab:
|