我在我的py
文件中有以下测试详细信息,我正试图用正则表达式。
>>> a = '''
... def test_1(self, a, b):
... """
... @desc description
... @para parameter
... """
... '''
以下是我的尝试:
>>> re.findall(r'.*(def\s+test_.*\"\"\".*\"\"\").*', a)
[]
有人可以帮我弄清楚我是否遗漏了什么?
答案 0 :(得分:1)
您的模式是正确的,但您必须使用re.DOTALL标志,因为。*将不匹配换行符。
>>> re.findall(r'.*(def\s+test_.*\"\"\".*\"\"\").*',a,re.DOTALL)
['def test_1(self, a, b):\n\t"""\n\t@desc description\n\t@para parameter\n\t"""']
答案 1 :(得分:0)
您可以使用re.DOTALL标志来匹配测试详细信息中的换行符,但要小心将贪婪。*匹配与re.DOTALL结合
以下内容适用于同一文件中的多个测试,使用非贪婪(。*?)匹配:
import re
a = '''
def test_1(self, a, b):
"""
@desc description
@para parameter
"""
def test_2(self, a, b):
"""
@desc description
@para parameter
"""
'''
pattern = re.compile('\s*def\s+test_.*?""".*?"""', re.DOTALL)
set = pattern.findall(a)
for item in set:
print "MATCH:"
print item
这会产生以下输出:
MATCH:
def test_1(self, a, b):
"""
@desc description
@para parameter
"""
MATCH:
def test_2(self, a, b):
"""
@desc description
@para parameter
"""