1

我在这里阅读了一些帖子,但他们无法帮助我弄清楚我的问题:

您可以阅读下面的正则表达式,它试图匹配排除特定字符串“个人资料图片”的地方。如果表达式的开始字符串不是“个人资料图片”,我想匹配所有其他情况,但它不起作用:

re.compile(r"(?!Profile Pictures)</strong></a><div class=\"photoTextSubtitle fsm fwn fcg\">(\d+) photos</div>")

返回匹配的数字(\d+),但“个人资料图片”仍算作其中之一。我尝试了不同的方法,但它们都不起作用。但是,我仍然觉得消极的前瞻性是解决它的方法。有任何想法吗?谢谢!

4

1 回答 1

1

根据python regex 文档,您正在使用(?!...否定的前瞻断言

如果 ... 下一个不匹配,则匹配。这是一个否定的前瞻断言。例如,Isaac (?!Asimov) 将匹配 'Isaac ' 仅当它后面没有 'Asimov' 时。

在这种情况下,您想要的(?<!...是一个否定的后向断言。这是因为您试图避免匹配要匹配的文本之前的文本,而不是之后的文本。从正则表达式文档:

如果字符串中的当前位置之前没有匹配 ...,则匹配。这称为否定后向断言。与肯定的后向断言类似,包含的模式必须只匹配一些固定长度的字符串。以否定后向断言开头的模式可能在被搜索的字符串的开头匹配。

那会给你一个看起来像这样的正则表达式:

re.compile(r"(?<!Profile Pictures)</strong></a><div class=\"photoTextSubtitle fsm fwn fcg\">(\d+) photos</div>")

当然,如果没有您提供的一些示例,很难对此进行测试。

于 2012-09-10T04:23:01.520 回答