请教一个正则表达式:"^(/wiki/)((?!:).)*$)"
在抓取一个维基百科页面里所有的wiki文章链接时遇到的。
可以分析一下这个表达式后半部分吗?
请教一个正则表达式:"^(/wiki/)((?!:).)*$)"
在抓取一个维基百科页面里所有的wiki文章链接时遇到的。
可以分析一下这个表达式后半部分吗?
(?!)
零宽度负预测先行断言,你这个例子里表示 /wiki/ 后可以跟 0 到多个任意字符,但此处首位不能是 :
再看了下,好像不对,((?!:).)*
有双层括号,那就是非 :
的任意字符了。
写成这样,好理解些~
"(^(/wiki/)([^:]*):$)"
>>> import re
>>> s='/wiki/abc123D!@#%d:'
>>> ptn2=re.compile("(^(/wiki/)([^:]*):$)")
>>> ptn2.findall(s)
[('/wiki/abc123D!@#%d:', '/wiki/', 'abc123D!@#%d')]
>>>
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
((?!:).)*匹配0或任意多个不以:结尾的任意字符。
可以在chrome控制台里直接尝试
返回结果
如果要匹配abc123D!@#%d的话,把((?!:).)*外面再加个括号
返回结果