正则表达式排除特定字符串

时间:2012-09-10 03:49:44

标签: python regex parsing

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

你可以阅读下面的regexp,它试图匹配一个排除特定字符串“Profile Pictures”的地方。如果表达式的起始字符串不是“Profile Pictures”,我希望匹配所有其他情况,但它没有工作:

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

返回匹配的数字(\ d +),但“个人资料图片”仍被视为其中之一。 我尝试了不同的方法,但没有一种方法有效。但是,我仍然觉得消极的前瞻是解决问题的方法。有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

根据python regex documentation

,您正在使用(?!...否定前瞻断言
  

匹配如果......下一个不匹配。这是一个负面的先行断言。例如,Isaac(?!Asimov)只有在没有'Asimov'的情况下才会匹配'Isaac'。

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

  

匹配,如果字符串中的当前位置前面没有匹配....这称为负后观断言。与正向lookbehind断言类似,包含的模式必须仅匹配某些固定长度的字符串。以负向lookbehind断言开头的模式可能在被搜索字符串的开头匹配。

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

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

当然,如果没有你的一些例子,很难对此进行测试。