我需要尋找這樣的事情:蟒蛇反向引用的正則表達式
lines = """package p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
);
end p_dio_bfm; -- end package;
package body p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
) is
begin
bfm_cmd := pin;
end setBFMCmd;
end p_dio_bfm;"""
我需要解壓包的名稱,即p_dio_bfm和包聲明,即與FIRST「結束p_dio_bfm之間的「包p_dio_bfm是」部分;」
問題是包聲明可能以「end p_dio_bfm;」結尾或「最終包裹」;所以我嘗試了以下「OR」正則表達式: - 適用於以「end package」結尾的軟件包 - 對於以「end pck_name;」結尾的軟件包不起作用。
pattern = re.compile("package\s+(\w+)\s+is(.*)end\s+(package|\1)\s*;")
match = pattern.search(lines)
的問題是(包| \ 1)正則表達式,在那裏我什麼趕無論是單詞「包」或匹配軟件包名稱的一部分。
UPDATE:我提供了一個完整的代碼,我希望能澄清:
import re
lines1 = """package p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
);
end p_dio_bfm;
package body p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
) is
begin
bfm_cmd := pin;
end setBFMCmd;
end p_dio_bfm;"""
lines2 = """package p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
);
end package;
package body p_dio_bfm is
procedure setBFMCmd (
variable pin : in tBFMCmd
) is
begin
bfm_cmd := pin;
end setBFMCmd;
end package;"""
lines1 = lines1.replace('\n', ' ')
print lines1
pattern = re.compile("package\s+(\w+)\s+is(.*)end\s+(package|\1)\s*;")
match = pattern.search(lines1)
print match
lines2 = lines2.replace('\n', ' ')
print lines2
match = pattern.search(lines2)
print match
我希望在這兩種情況下,採用了獨特的正則表達式,要回這部分:
"""procedure setBFMCmd (
variable pin : in tBFMCmd
);"""
沒有我刪除的\ n字符。
您可以發佈預期的輸出嗎? –