Je travaille sur un utilitaire "grep-like" en Python pour la recherche de fichiers de code source Oracle. les normes de codage ont changé au fil du temps, afin d'essayer de trouver quelque chose comme « de la table tout supprime a.foo » pourrait couvrir plusieurs lignes, ou non, en fonction de l'âge de ce morceau de code:position de chaîne de la carte à numéro de ligne dans la sortie regex
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() ]
Cette sortie:
DELETE
a.foo
DELETE a.foo
DELETE a.foo
Ce que je veux:
[2] DELETE
[3] a.foo
[7] DELETE a.foo
[10] DELETE a.foo
est-il un moyen rapide/simple,/bUILTIN carte des indices de chaîne pour les numéros de ligne?
Merci, vous bercez! – kurosch
Que faire si vous êtes sur un système différent ou que vous ne savez pas sur quel système d'exploitation vous êtes? Il pourrait être soit \ n \ f \ f soit une combinaison de ceux-ci. – sebs
Vous pouvez toujours utiliser os.linesep comme décrit ici http://stackoverflow.com/questions/454725/python-get-proper-line-ending#454809 –