我正在尝试构建正则表达式,以便在没有明确继承object
的情况下将类发现到python代码中。
import re
test_string = '''
class Test(object):
pass
class Test:
pass
'''
regex = r'class .*(?!\(object\)).*'
re.compile(regex).findall(test_string)
这给了我:
'class Test(object):', 'class Test:'
但我只需要'class Test:'
。
与此同时,积极的前瞻工作正常:
>>> print regex = r'class .*(?=\(object\)).*'
['class Test(object):']
这里有什么问题?
答案 0 :(得分:2)
你需要在" class"之后使用(?!.*\(object\))
否定前瞻:
class (?!.*\(object\)).*
请参阅regex demo
.*(?!\(object\)).*
子模式匹配除了(object)
后面的换行符以外的任何0+个字符。它有效地抓住所有行到它的结尾,并且在它之后找不到任何(object)
。第二个.*
甚至不匹配任何内容,因为所有字符已经"属于"到第一个.*
。
在(?!.*\(object\))
中,在使用class
+空格后进行检查,一旦当前行的某处有(object)
,就会失败。