我正在尝试解析以下文本
`ifndef abc
`define abc
module xyz(
block
#(
.BLK (def::a)
)
inst
(/*AUTOINST*/
这是我试过的正则表达式:
(\w+)\s*.*?(\w+)\n*\s*\(\n*\/\*AUTOINST\*\/
预期产出:
Match
1. block
2. inst
实际产量:
Match
1. ifndef
2. inst
更新
定义同一代码块有多种方法:
如何用一个正则表达式解析所有这些不同风格代码中的所有块和实例?
如果这是我使用(\w+)\s*.*?(\w+)\n*\s*\(\n*\/\*AUTOINST\*\/
regex的测试输入,那么我可以正确地得到5个输出中的4个
block1
#(.en (en))
inst1
(/*AUTOINST*/
block2 inst2
(
/*AUTOINST*/
block3 inst3
(/*AUTOINST*/
block4
#(.en (en))
inst4(/*AUTOINST*/
block5
#(
.BLK (defs::blk)
)
inst5
(/*AUTOINST*/
输出:
Match 1
1. block1
2. inst1
Match 2
1. block2
2. inst2
Match 3
1. block3
2. inst3
Match 4
1. block4
2. inst4
如果开头有多余的行,则第一个匹配不正确:
ifndef abc
block1
#(.en (en))
inst1
(/*AUTOINST*/
输出:
Match 1
1. ifndef
2. inst1
有人能帮我找出问题所在吗?提前谢谢
你可以用
模式匹配:
^
字符串的开头(\w+)
在组1中捕获1+个单词字符(?:
非捕获组\n(?!\s*\w).*
匹配一个换行符并断言在可选的空格字符之后没有单词字符)*
关闭组并可选地重复\n\s*
匹配换行符和可选的空白字符(\w+)
在组2中捕获1+个单词字符\n\s*
匹配换行符和可选的空白字符\(/\*AUTOINST\*/
匹配(/*AUTOINST*/
见aregex demo或aPython demo
例如,使用re.findall返回捕获组值:
输出
这一个对我有用:
这是一个实时的Demo
相关问题 更多 >
编程相关推荐