【问题标题】:Regex, Negative Lookback, Prevent Match正则表达式、负回溯、防止匹配
【发布时间】:2014-03-31 22:46:22
【问题描述】:

我在 Python 中处理正则表达式的逻辑时遇到了一些麻烦。如果字符串以子字符串结尾,我想编写一个 返回匹配项的正则表达式。最终,我试图排除在<a> 标签的href 属性中找到的任何二进制文件链接。 (这是在 Scrapy 中实现的)

我的问题是,如果我的正则表达式是 [^ \t\n\r\f\v]+[\/]?(?<!.pdf) 并且它找到指向 someDocument.pdf 的链接,它会返回 someDocument.pd

如果发现该字符串,我该如何防止返回任何匹配项?

【问题讨论】:

  • “如果字符串以子字符串结尾”:这难道不是总是吗?字符串的所有部分都是子字符串,包括“end”。
  • @Asad 我认为他的意思是“如果一个字符串以某个子字符串结尾”
  • @AdamSmith 啊,我明白了,谢谢。 @OP所以,澄清一下,您是否正在寻找不以.pdf 结尾的字符串?如果是这样,您可以否定为^.*\.pdf$ 测试字符串的结果。

标签: python regex assertion


【解决方案1】:

如果您使用的是来自 scrapy,那么您可能需要在您的正则表达式末尾添加一个 $

[^ \t\n\r\f\v]+[\/]?(?<!\.pdf)$

如果有任何方法可以从您的项目中使用BeautifulSoup,请尝试一下:

htmls = '''<a href="adssad/asdasd/asd.pdf">M</a> <a href='asdasdasdas/asdasd/asdasd.doc'></a>'''
soup = BeautifulSoup(htmls)
for link in soup.findAll("a", {"href":re.compile("(?<!\.pdf)$")}):
    print link['href']

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2017-08-23
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多