2012-04-30 2 views
0
의 비 그룹화 버전은 무엇입니까

가능한 중복 :
Non capturing group?일반 괄호

파이썬 re 모듈 문서에서

, 내가 참조 :

(?:...) Non-grouping version of regular parentheses. 

(...) Matches the RE inside the parentheses. 
     The contents can be retrieved or matched later in the string. 

무엇이 다른가요?

+0

설명이 매우 정확하지 않습니다. '(? : ...) +'에 대해서 생각해 보면, 한정어는 while 그룹에 적용되지만 일치하는 내용을 참조 할 수는 없습니다. 나중에 캡처됩니다. –

답변

3

곧 : 비 그룹화는 그룹과 일치하지 않음을 의미합니다. 즉, 예를 들어 \ 1로 참조 할 수 없습니다.

1

차이점은 기본적으로 켄트가 말한 것입니다.

매우 복잡한 정규 표현식이나 성능이 중요한 텍스트를 대량으로 적용 할 때 유용 할 수 있습니다.

또한 정규식에서 많은 그룹화를 사용하지만 그 중 일부만이 (텍스트 대체 또는 다른 이유로) 참조 될 경우 이 실제로으로 필요한 것은 더 간단합니다. 그룹을 캡처하므로 숫자를 건너 뛰는 대신 \ 1 (또는 $ 1, 달려 있음)에서 \ n까지 참조 할 수 있습니다.

0

그룹화를 해제하면 실제 일치 검색어로 반환되지 않고 일치 문자열에 일련의 문자를 사용할 수 있습니다. 예를 들어, 영수증을 검색한다고 가정 해 보겠습니다. 상품에 대한 가격 만 받고 싶다고 가정 해 보겠습니다. 말처럼 영수증 보인다 : 당신은 총 말했다 가격으로 라인을 제외하지만 다른 모든 가격을 캡처하는 비 그룹화 괄호를 사용할 수

milk 1.25 
bread 1.15 
deli meat 5.25 
total 7.65 

.

+1

나는 캡쳐되지 않은 그룹들과보기를 혼동하고 있다고 생각합니다. 비 캡처 그룹이 일치 항목에 포함되기 때문에 역 참조를 통해 내용에 액세스 할 수 없습니다. –

+0

@TimPietzcker 사용 방법에 따라 다릅니다. 적어도 파이썬의 정규식 엔진에서는 그룹화되지 않은 일치가'.groups()'에 나타나지 않을 것이므로'findall()'또는 무엇인가를한다면, 내가 기술 한 것처럼 효과적으로 동작 할 것입니다 . –

+0

@ sr2222하지만 전체 일치 항목이 들어있는 .group (0)에 표시됩니다. – jordanm