2013-01-22 7 views
1

괄호가 아래 프로그램에서 사용 된 경우 ['www.google.com']입니다. 괄호 findall은 함수 출력에서 ​​제거되면파이썬에서의 정규식

import re 
teststring = "href=\"www.google.com\"" 
m=re.findall('href="(.*?)"',teststring) 
print m; 

['href="www.google.com"']이다.

import re 
teststring = "href=\"www.google.com\"" 
m=re.findall('href=".*?"',teststring) 
print m; 

누군가가 어떻게 작동하는지 설명하면 도움이됩니다.

+0

제공 한 코드는 완전히 동일합니다. 하지만 일반적으로 정규 표현식을 그룹화하는 것에 대해 이야기하고있을 것입니다. – Tadeck

+0

실제로 출력물을 생성하도록 예제 코드를 수정했습니다 (따옴표가 빠짐). 나는 여분의 세미콜론으로 떠났다. 파이썬은 그것들을 필요로하지 않는다. –

답변

5

re.findall() documentation 차이에 매우 분명하다 : 문자열에서 패턴의

반환 모든 비 중첩 경기, 문자열 목록으로. [...] 패턴에 하나 이상의 그룹이 있으면 그룹 목록을 반환합니다. 패턴에 두 개 이상의 그룹이 있으면 튜플의 목록이됩니다. 패턴의

  • 0 포착 기 (NO (...) 괄호) : 유사한 전체

그래서 .findall()는 패턴 그룹의 수에 따라 값이 3 가지 유형을 포함하는리스트를 반환 문자열 (두 번째 예에서는 'href="www.google.com"').

  • 패턴의 캡처 그룹 : 캡처 된 그룹을 반환합니다 (첫 번째 예에서는 'www.google.com').
  • 패턴에서 1 개 이상의 캡처 그룹 : 일치하는 모든 그룹의 튜플을 반환합니다. 당신이 그 행동을하지 않으려는, 또는 더 많은 정보를 원하는 경우 그룹을 추가하는 경우
  • 사용 비 캡처 그룹 ((?:...)). 예를 들어, href= 부분에 그룹을 추가하면 각각 두 개의 요소가있는 튜플 목록이 생성됩니다.

    >>> re.findall('(href=)"(.*?)"', teststring) 
    [('href=', 'www.google.com')] 
    
    +0

    첫 번째 출력은 [(href =, www.google.com)]이어야합니다. – Dhatri

    +0

    왜 그래야합니까? 하나 이상의 그룹이 있으면 튜플 목록을 반환합니다 (이것이 의미하는 바라면). –

    +0

    필자는 의심 스럽지만 href =는 pattern.i.e와 일치하더라도 출력에 포함되어 있지 않습니다.이 예제에서 그룹은 어떻게 동작합니까 ... 죄송합니다. Python을 처음 사용하는 경우 – Dhatri