2012-02-29 3 views
1

파일이 매우 형편 없지만 파싱 할 수 있고 필요한 값의 대부분을 추출 할 수 있습니다. 가변 길이 번호를 추출하는 방법을 배우는 방법을 알려주세요.파이썬에서 정규식을 사용하여 가변 길이 수를 추출하십시오.

다른 기능을 구문 분석하고 추출하려면 목록 인덱스를 '|', ''및 ':'과 같이 여러 가지 spliiters와 함께 사용했습니다. 그러나이 경우 나는 블록 (아래)에 도달 할 수 있으며 '_'주변의 숫자를 x와 y로 구분하여 각 행에 대해 추출해야합니다.

한 가지 방법은 처음에는 ':', '' ', 마지막으로'- '로 나눌 수 있지만 인덱스 위치 [0]과 [1]을 추출하지만 가장 효율적인 방법입니다 그래서.

chr5 : 17399789-17401949 REVERSE

chr5 : FORWARD 6414488-6415907

chr5 : FORWARD 2981156-2982709

chr5 : 6311725-6313323 REVERSE

chr5 : 12791432-12794551 REVERSE

chr5 : 927915-930781 앞쪽

chr5 : FORWARD 19585936-19587841

chr5 : 26894856-26896488 FORWARD

chr5 : 18138775-18142147 REVERSE

chr5 :

chr5 역방향 20537525-20538943 :

역방향 22496196-22500543

chr5 : 4747860-4753592 반전

위 블록은 '더 큰 블록'에서 왔습니다. :

AT1G09410.1 | 기호 : | 펜타 트리 펩티드 (PPR) 반복 - 함유 단백질 | chr1 : 3035443-3037560 FORWARD

'큰 블록'에서도 추출 할 수 있습니까?

내 프로그래밍 수준은 초보자로서 가장 잘 설명 할 수 있으며 도움이 필요합니다. 실제로 각 통해 정규 표현식을 실행하면,

numericalBlockRegEx = r'chr\d+:(?P<firstNumBlock>\d+)-(?P<secondNumBlock>\d+)' 

마지막 :

감사

AK

+1

출력물을 구체적으로 게시 할 수 있습니까? –

+0

@JoelCornett : 출력 형식을 17399789,17401949로 지정합니다.나는 모든 행에서 '큰 블록'을 읽고 '|'로 나누었다. 위의 블록 인 [-1]을 추출하려면 digit1, digit2와 같이 '-'로 구분 된 숫자를 추출해야합니다. 추출을 기존 루프에 적용 할 수 있지만 숫자를 추출하고 변수에 대입 할 정규 표현식이 필요합니다. – Bade

답변

3

한 가지 방법은 다음과 같은 파이썬 "원시"문자열로 정규 표현식을 정의하는 것 파일의 행을 찾으십시오 (일치하지 않고 search으로 전화해야 할 것입니다).

에 간단한 전화를 걸어 관심있는 수치 블록을 추출 할 수 있습니다.
x = match.group('firstNumBlock') #Gets first number block matched 
    y = match.group('secondNumBlock') #Gets second number block matched 

건배!