Frage

Ich arbeite an einem „grep-like“ Dienstprogramm in Python für die Suche Oracle Quellcodedateien. Coding-Standards haben sie im Laufe der Zeit verändert, so versuchen, so etwas wie „alle Löschungen aus der Tabelle a.foo“ finden konnte über mehrere Zeilen erstrecken, oder nicht, je nach Alter des Stückes Code:

s = """-- multiline DDL statement
DELETE
    a.foo f
WHERE
    f.bar = 'XYZ';

DELETE a.foo f
WHERE f.bar = 'ABC';

DELETE a.foo WHERE bar = 'PDQ';
"""

import re

p = re.compile( r'\bDELETE\b.+?a\.foo', re.MULTILINE | re.DOTALL )

for m in re.finditer( p, s ):
    print s[ m.start() : m.end() ]

Diese Ausgänge:

DELETE
    a.foo
DELETE a.foo
DELETE a.foo

Was ich will:

[2] DELETE
[3]     a.foo
[7] DELETE a.foo
[10] DELETE a.foo

Gibt es eine schnelle / einfache / builtin Weg String-Indizes auf Zeilennummern zuzuordnen?

War es hilfreich?

Lösung

lineno = s.count("\n",0,m.start())+1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top