2016-10-07 7 views
1

私はこの機能を持っています。 この関数は、達成しようとしていることを自分自身で説明します。正規表現とタプルとして2つのリストを返す

私はcontentexpectedに2つの正規表現を使用していますが、これらの2つの変数が同じ正規表現を使うことができればエラーになる可能性があります。

入力例:

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 
+1

\ ''(。*?)(?:: | \))*?= \ s *(。*)[:;] '' –

答えて

1

あなたは同時に両方のグループを一致させることができます:

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 
+0

正規表現を1つの正規表現に変換する。ありがとう。 – JonB

関連する問題