2013-06-29 2 views
0

파이썬을 사용하여 문자열의 모든 docblocks를 찾고 싶습니다. 내 첫 번째 시도는이이었다Regex findall이 python3에서 이상한 결과를 산출합니다.

b = re.compile('\/\*(.)*?\*/', re.M|re.S) 
match = b.search(string) 
print(match.group(0)) 

그리고 그 일을,하지만 당신은 자신을 알 수 있습니다으로 : 그것은 단지 1 docblock 밖으로, 모든 이들의 인쇄 할 수 있습니다.

그래서 나는 말한다 findall은 기능을 사용하고 싶었 그것은 것 같은 출력 모든 경기 :

b = re.compile('\/\*(.)*?\*/', re.M|re.S) 
match = b.findall(string) 
print(match) 

하지만 배열 만 이러한 종류의 유용한 것도 결코 :

[' ', ' ', ' ', '\t', ' ', ' ', ' ', ' ', ' ', '\t', ' ', ' ', ' '] 

설명서에 빈 문자열이 반환된다고 나와 있지만 어떻게 유용 할 수 있는지 알 수 없습니다. (비 외부 규정 괄호 당신이 말하는 것 "일치와,

b = re.compile('\/\*(.*?)\*/', re.M|re.S) 

답변

2

당신은 캡처 그룹 내부의 quatifier를 이동해야 - greedily) 괄호 안에있는 한 문자의 숫자, 그리고 그 한 문자를 캡처 ". 즉, ""또는 "aaaaaa"와 일치하지만 "abcde"에서는 "a"와 일치합니다. (그리고 그것은 "aaaaaa"에서조차도 욕심이 없기 때문에 단 하나의 "a"와 일치합니다.) 괄호 안에 한정자를 이동하면 (즉, 이전에 가지고 있던 것 대신 (.*?)) 이제는 "임의의 수의 문자를 일치시키고 모두 캡처합니다"라고 말합니다.

이 정보가 도움이 되었기를 바랍니다.

1

가 Rohit 자이나교의 (올바른) 대답에 약간의 확장하려면 :

+0

re.match ('(.) *', 'abcde')'전체 문자열과 일치하지만 그룹의 마지막 반복 인'e' 만 캡처합니다. –

관련 문제