python
  • regex
  • python-2.7
  • 2013-03-08 3 views 0 likes 
    0

    두 개의 거의 동일한식이 있고 좋은 결과를 얻고 다른 방법으로 잘못된 출력을 얻습니다. 이러한 모든 상기 변화 간단한 정규식 문제

    data/holidays/photos-2012-2013/word-another-more-more-5443/"><span class="bold">word another</span> - word</a>  
    
    regex = 'data/holidays/photos-2012-2013/.+?(\d{4})/"><span class="bold">(.+?)</span>(.+?)</a>' 
    

    word-another-more-more, word anotherword

    . 제대로 위의 인쇄 출력,이 같은 튜플의 목록 : ('6642', 'word another', ' - word')

    data/holidays/photos-2012-2013/word-another-more-more-5443/">word- another - <span class="bold">word another</span></a> 
    
    regex1 = 'data/holidays/photos-2012-2013/.+?(\d{4})/">(.+?)<span class="bold">(.+?)</span></a>' 
    

    이 위의 인쇄 밖으로 일부 쓰레기 코드, 사용되는 구문에도 불구하고이 idential입니다. 출력은 튜플을 포함하는 목록이지만 원치 않는 코드로 가득 차 있습니다.

    두 번째 정규식에 대한 잘못된 점을 볼 수 있습니까? 나를 위해

    +5

    HTML을 정규식으로 구문 분석하지 마십시오. 대신 HTML 파서를 사용하지 않는 이유는 무엇입니까? –

    +3

    매우 간단하다면 왜 도움이 필요합니까? :-) – paxdiablo

    +2

    Martijn Pieters에 동의합니다. 정규식을 사용하면 거의 HTML 구문 분석에 실패 할 수 있습니다. XML/HTML 파서를 대신 사용할 수 있다면 성공할 확률이 훨씬 높습니다. 그건 제쳐두고, 일반적인 제안으로 나는 시뮬레이터를 통해 http://regexpal.com/에서 입력을 실행 해보고 정규 표현식이 생각하는대로 작동하는지 확인해보십시오. – neilr8133

    답변

    1

    작품 :

    >>> import re 
    >>> text = 'data/holidays/photos-2012-2013/word-another-more-more-5443/">word- another - <span class="bold">word another</span></a>' 
    >>> re.findall(r'data/holidays/photos-2012-2013/.+?(\d{4})/">(.+?)<span class="bold">(.+?)</span></a>', text) 
    [('5443', 'word- another - ', 'word another')] 
    

    참고 : 는 정규 표현식으로 HTML을 구문 분석하지 마십시오. 이 이유 때문에 BeautifulSoup이 존재합니다.

    관련 문제