我有这个功能,我想看看是否可以做更多的pythonic。
该功能可以自我解释其要实现的目标。
我担心的是,我正在为content
和expected
使用两个正则表达式,这为错误蔓延提供了空间,最好是这两个变量可以使用相同的正则表达式。
输入示例:
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
这为您生成了成对的
content
,expected
:for c, e in custom_steps(None, test_names):
print c, e
输出:
Status code 200
Schema validator GetChecksumReleaseEventForAll true