Skip to main content
 首页 » 编程设计

python之正则表达式 Python 排除一些结果

2025年05月04日25kenshinobiy

有一个测试字符串:

Module([Assign([Name('a', Store())], Num(2)), Assign([Name('b', Store())], Num(3)), Assign([Name('c', Store())], Str('Hello')), Assign([Name('x', Store())], BinOp(Name('a', Load()), Add(), Name('b', Load()))), Assign([Name('x', Store())], Name('a', Load())), Expr(Call(Name('print', Load()), [Name('a', Load())], [], None, None)), For(Name('i', Store()), Call(Name('range', Load()), [Num(10)], [], None, None), [Expr(Call(Name('print', Load()), [Name('a', Load())], [], None, None))], [])])

我正在尝试从中获取所有加载的变量名。我的正则表达式是

[a-z]+(?=', Load) 

结果如下: result of regex 如您所见,它还可以找到内置模块,例如 print、range。如何排除它们?要排除的值前面有

Call(Name('  

我试过了

 (?=Call\(Name\(')[a-z]+(?=', Load) 

但是没有成功。

我的代码是:

import re 
 
test = '''Module([Assign([Name('a', Store())], Num(2)), Assign([Name('b', Store())], Num(3)), Assign([Name('c', Store())], Str('Hello')), Assign([Name('x', Store())], BinOp(Name('a', Load()), Add(), Name('b', Load()))), Assign([Name('x', Store())], Name('a', Load())), Expr(Call(Name('print', Load()), [Name('a', Load())], [], None, None)), For(Name('i', Store()), Call(Name('range', Load()), [Num(10)], [], None, None), [Expr(Call(Name('print', Load()), [Name('a', Load())], [], None, None))], [])])''' 
print(re.findall(r"[a-z]+(?=', Load)", test)) 
print(re.findall(r"(?=Call\(Name\(')[a-z]+(?=', Load) ", test)) 

请您参考如下方法:

使用lookbehind 和word boundary。

(?<!Call\(Name\(')\b\w+\b(?=', Load) 

查看演示。

https://regex101.com/r/hdxlQ8/1