我正在尝试编写一个正则表达式,在我已经提取的 C 语言条件语句中捕获赋值等号(使用 python 模块 re)。
我的尝试:
exp = re.compile(r'\(\s*[0-9A-Za-z_]+\s*[^!<>=]=[^=]')
虽然适用于多种情况,但无法匹配像以下字符串这样的简单情况:
'(c=getc(pp)) == EOF'
有人可以解释为什么我的正则表达式不匹配这个字符串,我怎样才能让它变得更好?我知道我可能仍然无法理解一些奇怪的情况,但我可以手动处理这些情况,目的是自动完成大部分的跑腿工作。
请您参考如下方法:
[^!<>=]遵循您的标识符可防止 =在 c 之后匹配.
如果您的目的是匹配赋值,请尝试只匹配标识符后的一个等号,如下所示:
exp = re.compile(r'\(\s*[0-9A-Za-z_]+\s*=[^=]')
print(exp.search('(c=getc(pp)) == EOF'))
结果是:
<_sre.SRE_Match object; span=(0, 4), match='(c=g'>
