Karte String Position Zeilennummer in regex Ausgangs
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?
Lösung
lineno = s.count("\n",0,m.start())+1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow