Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式的求反部分_Python_Regex - Fatal编程技术网

Python 正则表达式的求反部分

Python 正则表达式的求反部分,python,regex,Python,Regex,我正在尝试构建regex,以便在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:' 但是

我正在尝试构建regex,以便在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:'

但是我只需要
“类测试:”

同时,积极的前瞻性很好:

>>> print regex = r'class .*(?=\(object\)).*'
['class Test(object):']
这里有什么问题?

您需要在“类”之后使用
(?!.\(object\)
负前瞻:

*(?!\(object\).*
子模式匹配任何0+字符,而不是紧跟在
(object)
后面的换行符。它有效地抓住了所有的行直到它的末端,并且没有在它之后找到任何
(对象)
。第二个
*
甚至不匹配任何内容,因为所有字符都已“属于”第一个
*


(?!.\(object\)
中,检查是在使用
+空格后进行的,并且在当前行的某个地方有
(object)
时,匹配失败。

为什么要使用regex而不是
ast
?使用正则表达式更容易出现bug。@Bharel只是从github收集一些统计数据repos@xi嗯,这有点问题,因为您无法区分
类测试:…
“类测试:…”
。注释、字符串或docstrings中的任何数据也将计算在内:-/@Bharel good point
class (?!.*\(object\)).*