我有这个功能,我想看看是否可以做更多的pythonic。
该功能可以自我解释其要实现的目标。

我担心的是,我正在为contentexpected使用两个正则表达式,这为错误蔓延提供了空间,最好是这两个变量可以使用相同的正则表达式。

输入示例:

test_names = "tests[\"Status code: \" +responseCode.code] = responseCode.code === 200;\ntests[\"Schema validator GetChecksumReleaseEventForAll\"] = tv4.validate(data, schema);"

def custom_steps(self, test_names):
    """ Extracts unique tests from postman collection """
    content = re.findall(r'(?<=tests\[")(.*)(?::|"\])', test_names)
    expected = re.findall(r'(?<=\] = )(.*)(?::|;)', test_names)
    for i, er in enumerate(expected):
        if "===" in er:
            expected[i] = er[er.find('===')+4:]
        else:
            expected[i] = "true"

    return content, expected

最佳答案

您可以同时匹配两个组:

def custom_steps(self, test_names):
    regex = 'tests\["(.*)(?::|"\]).* = (.+)(?::|;)'
    for match in re.finditer(regex, test_names):
        content, expected = match.groups()
        if '===' in expected:
            expected = expected[expected.index('===') + 4:]
        else:
            expected = 'true'
        yield content, expected


这为您生成了成对的contentexpected

for c, e in custom_steps(None, test_names):
    print c, e


输出:

Status code 200
Schema validator GetChecksumReleaseEventForAll true

07-24 09:52
查看更多