【问题标题】:Python Regex Re exclude a string and include anotherPython Regex Re 排除一个字符串并包含另一个
【发布时间】:2016-07-22 02:59:56
【问题描述】:

我正在尝试仅将下面字符串的 <a> </a> 标记与“服务团队成员 - Ryde”匹配。

<a href="/cmp/_/job?jk=3711c253b2f3ccef&amp;tk=1a1dof">Services Team Members - Ryde</a>

挑战是排除“...p/_/job?”之后的随机字符串 目前我的解决方案在结果中包含随机数

<a href="/cmp/_/job\?(.*)>(.*)</a>  

我已经查看了环视方法,但无法让它们工作

http://www.regular-expressions.info/lookaround.html

【问题讨论】:

    标签: python regex web-scraping


    【解决方案1】:

    不要 (ever) 使用正则表达式解析 HTML。使用解析器。

    有一个不错的可用于 Python 的 HTML 解析器,名为 PyQuery 和另一个名为 BeautifulSoup。使用其中之一。

    from pyquery import PyQuery as pq
    
    doc = pq(url="http://your_url/")
    link = doc("a:contains('Services Team Members - Ryde')")
    
    print(link.attr("href"))
    

    打印

    '/cmp/_/job?jk=3711c253b2f3ccef&tk=1a1dof'
    

    在您受到诱惑之前,也不要使用正则表达式解析 URL。使用parser

    from urlparse import urlparse, parse_qs
    
    url = urlparse('/cmp/_/job?jk=3711c253b2f3ccef&tk=1a1dof')
    params = parse_qs(url.query)
    
    print(params)
    

    打印

    {'tk': ['1a1dof'], 'jk': ['3711c253b2f3ccef']}
    

    【讨论】:

    • 虽然这是社区中受人尊敬的观点,但我发现与正则表达式相比,将 HTML 解析器与 HTML 结合使用存在固有的优缺点。
    • 不,只有缺点。还有一大群人否认这一点,因为他们认为自己非常擅长正则表达式,以至于 他们 是规则的例外。但我不是来讨论这个的。如果你必须使用正则表达式,那就是你的葬礼。我只是在这里告诉你,正则表达式不是工作的正确工具——而且当适当的工具可用且易于使用时坚持使用错误的工具来完成工作是愚蠢的。
    • 不同意。匹配页面文本正文中的模式小节,正则表达式可以更容易使用。即访问页面“...在 ...了解有关工作的更多信息...”。使用 BS4,您将访问

      拆分为标记并循环遍历标记,这比在页面中间文本的任何位置进行正则表达式更乏味。这篇文章的主要目的是了解如何在 Python 中实现“环视”。

    • 不买那个,对不起。这篇文章的主要目的是你搜索一个正则表达式来解析 HTML。那个环顾四周的事情是一个红鲱鱼。请参阅“XY 问题” - 您甚至在提出问题之前就决定“环视”必须是解决方案,而您的问题当然是询问如何使用环视进行 $TASK,同时完全忽略了您实际上想做 $TASK,而不是“环顾四周”。你可以随心所欲地不同意我的观点。我什至给了你工作示例代码,它无疑比你的方法更简单(更容易维护)(而且它有效!)。
    • 让我总结一下:“我想挂一张照片。所以我有这个钉子,还有一个啤酒瓶,但我用它敲钉子时它总是会破裂。怎么能我用那个啤酒瓶把钉子钉在墙上?” - “啤酒瓶不适合这项工作,用锤子吧。这样会更容易。” - “嗯。但是我读到这里有一点争议。有人说啤酒瓶很适合将钉子钉在墙上。既然争论中的各方当然总是平等的,我坚持这样做用啤酒瓶。” - “如果你必须这样做,那就去做吧。它仍然是错误的。” - “我不同意”.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2023-03-31
    • 2011-08-31
    相关资源
    最近更新 更多