从具有正则表达式的文件中获取测试详细信息

时间:2017-08-30 00:44:34

标签: python regex python-2.7

我在我的py文件中有以下测试详细信息,我正试图用正则表达式。

>>> a = '''
... def test_1(self, a, b):
...     """
...     @desc description
...     @para parameter
...     """
... '''

以下是我的尝试:

>>> re.findall(r'.*(def\s+test_.*\"\"\".*\"\"\").*', a)
[]

有人可以帮我弄清楚我是否遗漏了什么?

2 个答案:

答案 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
        """