我正在尝试编写一个正则表达式来捕获 python 中对私有(private)成员的任何使用,函数名称除外。
例如,以下应返回 true:
a = __something__
b.__something()
__bla = 5
a[__bla__]
... etc etc
但是下面的应该返回 false:
def __unicode__(self):
....
(因为它前面有“def”)
我写了这个表达式:
regexp = re.compile(r'(?!def\s)[^a-zA-Z^_\s]__[a-zA-Z]')
它适用于大多数情况,但出于某种原因,如果在 private 之前有空格,它总是返回 false,例如,这不会返回 true:
regexp.search("something = __private")
我在这里做错了什么?如果“(?!def\s)”前面有“def”,则“(?!def\s)”不应匹配,我处理两个下划线之前的空格,例如在“[^a-zA-Z^_\s]”中。那为什么它不起作用?
编辑:
虽然接受的答案对于正则表达式是正确的,但我建议查看 Padraic Cunningham 的答案以获得使用 ast 的更好解决方案。 谢谢,
最佳答案
关于python - 正则表达式捕获在 python 中使用私有(private)成员的代码,除非它是函数 def,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253940/