3
我正在研究Python中用於搜索Oracle源代碼文件的「grep-like」實用程序。編碼標準隨時間而變化,所以試圖找到一些像「一切從表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
是否有一個快速/簡單/內置的方法來映射字符串的索引行號?
謝謝,你搖滾! – kurosch 2009-10-05 21:55:10
如果你在不同的系統上,或者你不知道你在使用哪個操作系統,該怎麼辦?它可以是\ n \ r \ f或這些的組合。 – sebs 2011-11-09 04:45:49
您可以隨時使用os.linesep,如http://stackoverflow.com/questions/454725/python-get-proper-line-ending#454809 – 2012-01-29 14:20:54