سؤال

أنا أعمل على "Grep-ase" فائدة في Python بحثا عن ملفات التعليمات البرمجية المصدر Oracle. تغيرت معايير الترميز مع مرور الوقت، لذلك تحاول العثور على شيء مثل "جميع الحذف من الجدول A.Foo" يمكن أن يسبق خطوط متعددة، أم لا، اعتمادا على عمر تلك القطعة من التعليمات البرمجية:

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() ]

هذا المخرجات:

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

ماذا اريد:

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

هل هناك طريقة سريعة / بسيطة / مدمجة لتعيين مؤشرات السلسلة بأرقام الأسفل؟

هل كانت مفيدة؟

المحلول

lineno = s.count("\n",0,m.start())+1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top