我试图收集一组网址,使用beauthoulsoup,有一个非常具体的标准。我要收集的URL必须包含/b-\d+
(/b-
后面跟一系列数值)。但是,我希望忽略包含View%20All
的所有url,即使其中包含/b-\d+
。
以下是URL示例:
1. http://www.foo.com/bar/b-12312903?sName=View%20All
2. http://www.foo.com/bar/b-832173712873?sName=View%20All
3. http://www.foo.com/bar/b-1208313109283129
4. http://www.foo.com/bar/b-2198123371239489?adCell=W3
对于上面的示例,我要收集的有效URL是#3和#4。我尝试过使用不同的反向lookahead正则表达式,但它们对我不起作用:
^{pr2}$有人能告诉我我做错了什么吗?在
你哪里错了?在
当我们给出
(?!View\%20All)
时,它断言View\%20All
不能紧跟前面的模式.+
匹配实际上,这意味着未来总是正确的
为了举例说明,让我们检查每个模式匹配的是什么
http://www.foo.com/bar/b-12312903?sName=View%20All
/b-
很明显\d
匹配12312903
现在问题出现了
.+
匹配任何使否定断言(?!View\%20All)
成功的任何内容。在也就是说
.
匹配?s
未匹配的字符串是sName=View%20All
,它与起始位置s
的(?!View\%20All)
不匹配,因此总是成功地匹配第1行和第2行demo以获得清晰的图像。在
修复??在
使用lookaround断言时,请修复检查开始的位置
比如说使用类似regex的
^{pr2}$与3和4相匹配
http://regex101.com/r/aS5yS2/1
这里,}固定了否定断言开始的位置。在
?
或{Demo
或者更快
^{pr2}$相关问题 更多 >
编程相关推荐