2012-05-25 2 views
1

텍스트가 주어지면 (정확히 말하면) 대문자가 3 개있는 문자가 있는지 확인해야합니다. retured 문자. 개체와 특정 정규식을 파이썬으로 일치 시키려면

내가 쓴 다음, 때 이제 "AAAbAAA"와 "AAAcAAA"

: m = re.match("[A-Z]{3}.[A-Z]{3}", text) 내가 경기 객체에서 두 그룹을 얻을 것으로 예상

(의 텍스트 = "AAAbAAAcAAA"을 가정 해 봅시다) m.group(0)을 호출합니다. "AAAbAAA"가 맞았습니다. 그러나 m.group(1)을 호출 할 때 "AAAcAAA"가 일치하지 않는다는 것을 의미하는 그런 그룹이 없다는 것을 알았습니다. 왜?

또한 m.groups()을 호출 할 때, 일치하는 튜플을 가져야하지만 빈 튜플이 생깁니다. 즉, 제 경우에는 "AAAbAAA"가있는 튜플을 가져야합니다. 왜 그게 효과가 없습니까?

+0

파이썬 문제를 수행하고 있습니까? :-) –

+0

아니, 어떤 도전? 링크를 걸 수 있습니까? – user1413824

+0

그것은 재미있다. .. 그러나 그것은 초조하게하게 될 수있다. .. :) http://www.pythonchallenge.com/ –

답변

2

findall처럼 보이는 경우 하나는 match입니다. 그것은 둘러싸고있는 수도 세 쌍둥이를 움켜 잡지는 않을 것이지만, re.findall('[A-Z]{3}([a-z])(?=[A-Z]{3})', search_string)은 당신에게 3 개의 대문자로 양쪽에 둘러싸인 모든 하나의 소문자 문자를 얻을 것이다.

+0

감사합니다. 작동하는 것을 볼 수 있습니다. 왜 좌 표식 [A-Z] {3}은 괄호로 묶여 있지 않습니까? 메신저를 괄호로 묶을 때 일치하는 항목이 없으므로 그 이유는 무엇입니까? – user1413824

+0

괄호 안에 넣을 때 성냥을 가져올 이유가 확실치 않은 이유는 ...하지만 일치하는 그룹이 아니거나 앞을 보거나 뒤떨어져있어 괄호 안에 있지 않습니다. –

+0

그럼 마지막으로 괄호 안에있는 이유는 무엇입니까? 이 정규식에있는 모든 괄호를 설명 할 수 있습니까? 이해하는 것이 정말로 중요합니다. – user1413824

4

패턴에 그룹이 없습니다. 그룹에 뭔가를 캡처하려면, 당신은 괄호를 둘러싸고 있습니다

([A-Z]{3}).[A-Z]{3} 

예외가 m.group(0)입니다, 항상 전체 경기를 포함 할 것이다.

질문을 살펴보면 실제로 캡처 그룹을 찾는 것이 아니라 겹치는 일치하는 것으로 들립니다. 정규 표현식에서 그룹은 나중에 사용하기 위해 따로 설정되는 부분 중 작은 부분을 의미합니다. 예를 들어, 다음 지역 번호가 group(2)group(1), 로컬 부분에있을 것입니다

([0-9]{3})-([0-9]{3}-[0-9]{4}) 

처럼 뭔가 전화 번호와 일치하는 것을 시도하는 경우, 전체 것은 group(0)에있을 것입니다.

원하는 것은 겹치는 부분을 찾는 것입니다. 여기에 how to do overlapping matches in Python regex, 및 여기 내 즐겨 찾기가 설명되어있는 스택 오버플로 대답이 있습니다. reference for capture groups and regex in general.

+0

오, 전 단지이 사이트를 좋아합니다. 각 괄호가 그룹을 정의합니까? 과 (q = ...)와 같은 괄호는 무엇을 의미합니까? 그리고 난 아직도 왜 내 정규식 작업을하지 않습니다 모르겠다 – user1413824

+1

(? =) 긍정적 인 선견이다. 즉, 엔진은 검사중인 문자를 소비하지 않고 문자열을 검색하여 일치 여부를 판별합니다. –

+0

그들은 Finditer를 사용하여 문서에 다음과 같이 말합니다 : "모든 중첩되지 않는 문자열의 RE 패턴과 일치하는 MatchObject 인스턴스를 반환하는 반복자를 반환하십시오." 나에게 도움이되지 않는다. 나는 그것을 시도했다. – user1413824

관련 문제