2011-02-04 5 views
2

전 라인의 숫자가 난 내가 열고 URL을 _grep -B14 MMA파이썬 GREP은 패턴을 찾아 다음

에 해당 할 찾고 있어요 그리고 많은 라인을 뱉어. 나는

  1. 에이

나는 경우에도이 시작하는 모르는 전에 'MMA'는

  • 후 14 선을 인쇄이 라인을 찾을합니다.

    import urllib 
    import urllib2 
    
    url = "https://longannoyingurl.com" 
    
    opts = { 
        'action': 'Dump+It' 
    } 
    data = urllib.urlencode(opts) 
    req = urllib2.Request(url, data) 
    response = urllib2.urlopen(req) 
    print response.read() # gives the full html output 
    
  • +0

    하나 개 이상의 라인이 일치하는 예상되는 결과는 무엇입니까있어? –

    +0

    어디서부터 시작해야할지 어떻게 알 수 있습니까? 시작할 위치에 대한 IDEA가 있어야합니다. – Falmarri

    답변

    7

    대신 응답 개체에 read을 사용하는 대신 readlines을 호출 한 다음 각 줄을 통해 정규식을 실행하십시오. 행이 일치하는 경우 앞에 14 행을 인쇄하고 색인 생성이 음수가 아닌지 확인하십시오. 예 : 댄에

    import re 
    
    lines = response.readlines() 
    
    r = re.compile(r'MMa') 
    for i in range(len(lines)): 
        if r.search(lines[i]): 
         print lines[max(0, i-14)] 
    
    +1

    Dan이 작품을 고맙다! –

    0

    mystr.splitlines()을 사용하면 단일 문자열을 줄 목록으로 나눌 수 있습니다. re.match()을 사용하여 문자열이 정규 표현식과 일치하는지 테스트 할 수 있습니다. 일치하는 줄을 찾으면 줄의 목록으로 뒤로 인덱싱하여 전에 14 줄을 찾을 수 있습니다.

    +0

    이 상황에서'search'는 아마도'match'보다 더 적합 할 것입니다. –

    1

    덕분에 내 결과

    import urllib 
    import urllib2 
    import re 
    
    url="https://somelongannoyingurl/blah/servlet" 
    opts = { 
        'authid': 'someID', 
        'action': 'Dump+It' 
    } 
    data = urllib.urlencode(opts) 
    req = urllib2.Request(url, data) 
    response = urllib2.urlopen(req) 
    
    lines = response.readlines() 
    r = re.compile(r'MMa') 
    for i in range(len(lines)): 
        if r.search(lines[i]): 
        line = lines[max(0, i-14)].strip() 
        junk,mma = line.split('>') 
        print mma.strip() 
    

    ~

    관련 문제