Für diesen Zweck vielleicht etwas zu aufgeblasen, aber trotzdem:
import sys, re def firstMatch(regExp, text): """returns the first match of the python regular expression regExp in text or None if no such match exists. >>> firstMatch("ab*c", "acabcb") "ac" >>> firstMatch("p?ro", "acabcb") """ matOb = re.search(regExp, text) if matOb: retVal = matOb.group(0) else: retVal = None return retVal if __name__=="__main__": if len(sys.argv)<3: sys.stderr.write("Usage: firstmatch.py <re> <fname>\n") sys.exit(1) try: txt = open(sys.argv[2]).read() except IOError, msg: sys.stderr.write("Couldn't open %s: %s\n"%(sys.argv[2], str(msg))) sys.exit(1) mat = firstMatch(sys.argv[1], txt) if mat is not None: print mat
Demgegenüber wäre auch die lean-and-mean-Fassung denkbar, je nach Einsatzziel (dieses hier ist mehr Einwegsoftware – auf die gibts zwar noch kein Pfand, aber schön ist das trotzdem nicht):
import sys, re m = re.search(sys.argv[1], open(sys.argv[2]).read()) if m is not None: print m.group(0)
(weiterführend:) – oder, als Äquivalent des 400 PS-Motors (völlig nutzlos und gefährlich, aber man kann zumindest glauben, damit significant others zu beeindrucken – das hier basiert auf short circuit evaluation, die erst später kommt):
import sys, re sys.stdout.write([(a is not None and a.group(0)+"\n") or "" for a in [re.search(sys.argv[1], open(sys.argv[2]).read())]][0])