2017-03-28 1 views
0

간단한 regex를 사용하여 여러 번 일치시키는 방법. 나는 이것을 시도 : (?:key:)((?:\s*'[^']+')),하지만 작동하지 않습니다.Regex match group

입력

키 'VAL1'을 val2 'val3'

출력

군 1 = VAL1

군 2 = val2만큼

그룹 3 = val3

편집 : 원하는 키 다음에 simples 따옴표로 묶인 모든 태그를 찾는 방법?

+0

은 다음과 중복 될 수 있습니다. http://stackoverflow.com/questions/37003623/how-to-capture-multiple-repeated-groups –

+0

내 문제를 해결하지 못함 –

+0

결과가 무엇인지 예를 게시하십시오. 최대한 검색 패턴을 설명하십시오. 네가 할 때, "그룹"... 뭐야? – zer00ne

답변

0

원하는 것을 직접 수행 할 수는 없습니다. regex를 사용하면 다양한 수의 캡처 그룹을 가질 수 없습니다.

그러나. 그룹 수에 제한이있는 경우 해당 제한에 대해 (?:\s*('[^']+')*)?을 반복 할 수 있습니다. 따라서 주어진 예제와 일치 할 수 있으려면 필요합니다. (?:\s*('[^']+')*)? 3 회 반복되었는지가

key:(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?(?:\s*('[^']+')*)? 

참고.

Live preview

단지이 패턴 '[^']+' 반복하는 쉽고 더 좋을 수 있습니다. 어떤 언어도 언급하지 않았으므로 파이썬에서 자유롭게 사용했습니다.

import re 
string = "'val1' 'val2' 'val3'" 
for i, match in enumerate(re.finditer(r"'([^']+)'", string), start=1): 
    print("group %d = %s" % (i, match.group(1))) 

상기 인쇄 될 실행될 때

군 1 = VAL1

군 2 = val2만큼

그룹 3 = val3

을 따라서 대신하려고 "가변"수의 캡처 그룹을 만듭니다. 대신 따옴표 패턴에 대한 모든 일치를 반복하십시오.

0

다음 정규식을 사용하여이 문제를 해결했습니다. (?:key:\G)|('[^']+')+, here은 어떻게 작동하는지 확인하는 링크입니다.

+0

문제를 해결하지 못했습니다. https://regex101.com/r/btiVeq/4 – sln