我试图编写一个regex来捕捉python中私有成员的任何使用,函数名除外。
例如,以下内容应返回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,例如,this will not return true:
regexp.search("something = __private")
我在这里做错什么了?“(?!def\s)“如果前面有”def“,则不应匹配,并且我在两个下划线之前处理空格,例如在“[^a-zA-Z^\s]内。”。为什么不起作用?
编辑:
虽然接受的答案对regex是正确的,但我建议查看Padraic Cunningham的答案,以使用ast获得更好的解决方案。
谢谢,
最佳答案
你可以试试:
(?<!def\s)(\b__[a-zA-Z])
Example
source