2012-02-12 3 views
3

정규식을 사용하여 여러 줄 패턴을 검색하는 데 문제가 있습니다.multiline regex

다음
some command [first line]\n 
second line \n 
yes can have multiple lines\n 
\n 
something else that I do not care about. 

내가 지금까지 시도 무엇인가 : 다음은 샘플 여러 줄 문자열입니다

>>> match = re.match(r"^(.+)\n((.*\n)*)\n",body,re.MULTILINE) 
>>> match.groups() 
('some command [first line]', 'second line \nyes can have multiple lines\n', 'yes can have multiple lines\n') 

내가 match.group (1) match.group를 찾고 있어요 (2), 그리고 그 (것)들과 함께 행복하지만, 나는 내가 기대하지 않는 match.group(3)을 얻는다는 것을 나를 괴롭 히고있다. (그리고 나의 정규 표현식이 옳지 않다는 것을 나를 이렇게 만든다.)

또한, 나는 내가 Python Regular Expressions from Google 통해 갔다 ..

match = re.match(r"^(.+)\n((?P<bd>.*\n)*)\n",body,re.MULTILINE) 
>>> match.group(bd) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
NameError: name 'bd' is not defined 

바로 패턴을 이름을 얻을하지 않는 것,하지만 난 아직 완전한 그림을 확보하지 않은 것은 분명하다.

답변

3

귀하가 예상 한 결과가 group2가 아닌 그룹 3에 있다는 것을 이해하셨습니까? 즉 문제가있는 경우

, 당신은 당신이 결과에서 두 그룹을 얻을 것이다이이

re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE) 

같은 시작에서 ?:을 넣어 그룹 이외의 캡처를 할 수 있습니다. 해결책이 될 것입니다 다음

re.match(r"^(.+)\n((?:.*\n)*)\n",body,re.MULTILINE) 

,

아마 당신이 잘못있어 당신은 그룹 3 제거하고자합니다. 당신은 당신이 정수 또는 인수로 문자열 중 하나를 group()를 제공하기 위해 필요한이

m.group('bd') 

처럼라는 이름의 그룹에 액세스 할 수 있습니다

명명 된 그룹 참조 MatchObject