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