我需要像这样搜索:
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;”结尾,因此我尝试了以下“或”regex,其中: -适用于以“结束包”结尾的包 -不适用于以“end pck_name;”结尾的包
^{pr2}$问题是regex的(package |\1)部分,在这里我要捕捉单词“package”或匹配的包名称。在
更新:我已经提供了一个完整的代码,我希望能澄清它:
^{3}$我希望在这两种情况下,使用一个唯一的regex,来取回这个部分:
"""procedure setBFMCmd (
variable pin : in tBFMCmd
);"""
没有我删除的\n字符。在
你的正则表达式与任何内容都不匹配,因为它是没有。不正确使用多行标志
.*
将不匹配新行字符,因此可以使用[\s\S]*
:参见演示https://regex101.com/r/tZ3uH0/1
但是这里还有另外一个问题,字符串包含2个package块,这一点是,作为一种更优雅和高效的方法,您可以使用
^{pr2}$re.DOTALL
标志,使“.”特殊字符与任何字符匹配,包括新线。所以您可以编写如下正则表达式:但这仍将匹配第一个区块:
对于匹配所有块,您需要澄清第二组中的单词
body
:参见演示https://regex101.com/r/tZ3uH0/3
怎么样:
我冒昧地不去过滤@mihai hangiu是怎么问的,包括第二个块。在
相关问题 更多 >
编程相关推荐