gpt4 book ai didi

python - 正则表达式捕获在 python 中使用私有(private)成员的代码,除非它是函数 def

转载 作者:行者123 更新时间:2023-11-28 16:26:24 25 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来捕获 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 的更好解决方案。谢谢,

最佳答案

你可以试试:

(?<!def\s)(\b__[a-zA-Z])

Example

source

关于python - 正则表达式捕获在 python 中使用私有(private)成员的代码,除非它是函数 def,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com