python
  • regex
  • python-2.7
  • 2013-03-08 161 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-moreword 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解析器呢? – 2013-03-08 22:20:48

    +3

    如果这么简单,为什么你需要帮助? :-) – paxdiablo 2013-03-08 22:20:55

    +2

    我同意Martijn Pieters,使用正则表达式几乎可以保证解析HTML失败;如果您可以使用XML/HTML解析器,则更有可能成功。除此之外,作为一般建议,我会说尝试通过http://regexpal.com/上的模拟器运行输入,并查看您的正则表达式是否按照您认为的方式工作。 – neilr8133 2013-03-08 22:23:02

    回答

    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只是因为这个原因而存在。

    相关问题