我需要搜索类似以下内容的东西:
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,以及包声明,即在"package p_dio_bfm is"和第一个"end p_dio_bfm;"之间的部分。
问题在于包声明可能以"end p_dio_bfm;"或"end package;"结尾。因此,我尝试了以下的“OR”正则表达式: - 对于以"end package"结尾的包有效 - 对于以"end pck_name;"结尾的包无效
pattern = re.compile("package\s+(\w+)\s+is(.*)end\s+(package|\1)\s*;")
match = pattern.search(lines)
问题在于正则表达式中的(package|\1)部分,这里我想要匹配单词“package”或匹配到的包名。
更新:我提供了完整的代码,希望能够更清楚地说明。
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字符。