Python 具有重复模式和排除模式的正则表达式

Python 具有重复模式和排除模式的正则表达式,python,regex,Python,Regex,我想使用一行正则表达式获取.c文件列表 排除注释掉的行(使用“python重新包”) 使用单行正则表达式有什么好的解决方案吗 我只使用了两个正则表达式,就成功了 (一个用于跳过注释行,另一个用于抓取.c文件) 最终结果将是[aaa.c、bbb.c、ccc.c] 仅供参考, 以下模式用于抓取所有.c文件: 模式:(?:[^/]+.c(?:|$))+ 在python中: re.findall(r'(?:(?:[^/]+.c(?:$))+)',file.read(),flags=re.MULTIL

我想使用一行正则表达式获取.c文件列表 排除注释掉的行(使用“python重新包”)



使用单行正则表达式有什么好的解决方案吗

我只使用了两个正则表达式,就成功了 (一个用于跳过注释行,另一个用于抓取.c文件)

最终结果将是[aaa.c、bbb.c、ccc.c]

仅供参考, 以下模式用于抓取所有.c文件:

模式:(?:[^/]+.c(?:|$))+

在python中:

re.findall(r'(?:(?:[^/]+.c(?:$))+)',file.read(),flags=re.MULTILINE)


逐行读取文件并应用第一个正则表达式没有错。不应该使用Regex解析文本文件,这正是您在这里所要求的。我看不到使用正则表达式来检测一行是否是注释和提取匹配项的明显方法。将正则表达式仅应用于一行还简化了您必须与
re.findall
一起使用的模式;逐行阅读的另一个好处是,Python不是使用著名的包beautifulsoup来解析html、xml文件吗?我想它是基于正则表达式的。我想不出一个绕过评论限制的方法。太糟糕了,Python不支持
\G
,否则它会easy@CertainPerformance我们也可以使用可变宽度的lookbehind来实现这一点,但这是一个性能杀手,容易出错,而不是regex真正想要做的。
#### a.sh file

A = /x/y/aaa.c /x/y/bbb.c /x/y/ccc.c

#B = /x/y/ddd.c /x/y/eee.c /x/y/fff.c

C = ddd eee fff
.
.