我的正则表达式似乎不能按预期工作,有人能帮我修复它吗
import re
a = """
xyz # (.C (0),
.H (1)
)
mv [F-1:0] (/*AUTOINST*/
except_check
#(
.a (m),
.b (w),
.c (x),
.d (1),
.e (1)
)
data_check
(// Outputs
abc
#(
.a (b::c)
)
mask
(/*AUTOINST*/
"""
op = re.findall(r'^\s*(\w+)\s*$\n(?:^\s*[^\w\s].*$\n)*^\s*(\w+)\s*\(', a, re.MULTILINE)
for i in op:
print(i)
这是我得到的输出:
('except_check', 'data_check')
('abc', 'mask')
这是预期输出:
('xyz', 'mv')
('except_check', 'data_check')
('abc', 'mask')
不知何故,正则表达式不适用于第一个输入块,而适用于其他两个输入块
下面是一个具有最小更改的正则表达式:
见regex demo
\s*$\n(?:^\s*[^\w\s]
部分替换为(?:\s*[^\w\s]
,因为第一个块不包含换行符最后,
\s*\(
被替换为[^()]*\(
,因为要提取的单词和(
字符之间除了空格之外还有其他字符详细信息:
^
-行的开头(允许您使用re.M
)\s*
-零个或多个空格(\w+)
-组1:一个或多个单词字符(?:\s*[^\w\s].*\n)*
-零个或多个空格、除_
之外的特殊字符、行的其余部分和LF字符的出现次数为零或多^
-行的开始\s*
-零个或多个空格(\w+)
-第2组:一个或多个单词字符[^()]*
-除(
和)
之外的零个或多个字符\(
-a(
字符李>或者,我认为您可以利用PyPi正则表达式中的递归特性。在终端/控制台中运行
pip install regex
,然后这是regex demo。它匹配:
^
-行的开始\s*
-零个或多个空格(\w+)
-组1:一个或多个单词字符\s*#\s*
-a#
包含零个或多个空格(\((?:[^()]++|(?2))*\))
-第2组:一个(
字符,然后是除(
和)
或第2组模式以外的任何一个或多个字符的任何零次或多次出现,然后是一个)
\s*
-零个或多个空格(\w+)
-第2组:一个或多个单词字符李>“(\w+)\s+\s?(\D*\s*\D*\s*\D?\w+\s*(\w+)”gm
用这个工作 你可以进一步简化
相关问题 更多 >
编程相关推荐