这段代码如何从带有正则表达式的字符串中提取URL

时间:2015-03-13 21:27:22

标签: python regex python-3.x string-parsing findall

我正在使用我在stackexchange上找到的片段,它使用re.findall()查找字符串中的所有url。它工作得很好,但为了进一步了解我想知道它是如何工作的。代码如下 -

re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', site)

据我所知,它找到所有以http或https开头的字符串(这就是为什么[s]在方括号中?)但我对{{{}之后的所有内容都不太确定1}}。我认为方括号中的东西例如。 (?:[etc etc etc]))+是指从a到z的所有字母是否包含,但其余的东西呢?它是如何工作的只是在URL的末尾获取url而不是随机字符串?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

使用此链接可以解释您的正则表达式: Your regex explained

再添加一点:

[s]?表示"一个可选的'字符"但那是因为?没有括号[我认为它们是多余的。

Space并不是其中一个被接受的角色,所以它确实会停在那里。同样适用于' /'。它不是字面上提到的,也不是字符范围$-_的一部分(见http://www.asciitable.com/index/asciifull.gif)。

(?:%[0-9a-fA-F][0-9a-fA-F])这匹配网址中的十六进制字符代码,例如' /' %2f 字符。

非捕获组意味着该组匹配,但结果匹配未存储在正则表达式返回值中,即在对字符串运行正则表达式后,无法提取字符串的匹配位。