2012-08-05 2 views
1

데이터의 길이를 지정하는 헤더가있는 메시지가 나타납니다. 나의 예에서는 처리 할 28 자의 메시지가 있습니다.일치하는 숫자를 하나의 파이썬 정규 표현식에서 반복 횟수로 사용합니다.

나는 같은 정규 표현식의 반복 수,이 비 작동 예를 들어 같은으로 일치하는 번호를 사용 할 수있는 방법을 찾기 위해 노력하고있어 :

s = "message 28\r\nthis is some random sentence" 
matches = re.match(r"(?P<command>\S+)\s+(?P<bytes>\d+)\r\n(?P<data>.{(?P=bytes)})", s, re.DOTALL).groupdict() 

나의 이해는 내 (P = 바이트?)는 "bytes"라는 이름의 그룹과 일치하는 동일한 문자열과 일치합니다. 정규 표현식을 임의로 변경하는 것이 아니라 그 이유는 작동하지 않지만 두 개의 정규식을 통해 문자열을 전달하지 않고 원하는 것을 얻을 수있는 방법이 있습니다. ?

+3

... 이제 2 가지 문제가 있습니다. 정규식은 모든 것에 대한 해답이 아닙니다. 이 경우에는 내장 문자열 작업을 사용하여 아주 쉽게 해결할 수있는 문제입니다. –

답변

5

길이와 일치 할 수있는 단일 정규 표현식을 작성한 다음 수량 기호에서 역 참조로 그 길이를 사용할 수 없습니다.

정규식을 사용하여 길이를 찾은 다음 일반 문자열 조각 작업을 사용하여 문자열에서 적절한 문자를 추출 할 수 있습니다.

+0

기본적으로 정규식을 동적으로 수정하는 것입니다. 확실히 과잉. – MRAB

관련 문제