首先,我已经阅读了this question关于如何检查字符串是绝对URL还是相对URL的内容。我的问题是,我需要一个正则表达式来检查给定的字符串是否是一个相对的URL,即,我需要一个正则表达式来检查字符串是否以任何协议或双斜杠//
开头。
实际上,我正在用Beautiful Soup进行web抓取,我想检索所有相关链接。Beautiful Soup使用以下语法:
soup.findAll(href=re.compile(REGEX_TO_MATCH_RELATIVE_URL))
所以,这就是我需要这个的原因。
测试用例是
about.html
tutorial1/
tutorial1/2.html
/
/experts/
../
../experts/
../../../
./
./about.html
非常感谢。
要匹配绝对值:
Live testing here.
为了匹配亲戚:
Live testing here.
既然你觉得有帮助,我就把我的建议发出去。
正则表达式可以是:
见demo
请注意,如果您开始添加排除项或其他选项,它将变得越来越不可读。因此,也许可以使用详细模式(用
re.X
声明):见IDEONE demo
另一个华盛顿盖德的统治集团
^([a-z0-9]*:|.{0})\/\/.*$
-匹配^
-字符串的开头([a-z0-9]*:|.{0})
-2替代品:[a-z0-9]*:
-0或更多字母或数字,后跟:
.{0}
-空字符串\/\/.*
-//
和0个或多个字符(注意,在Python中不需要转义/
)$
-字符串结尾因此,您可以将其重写为
^(?:[a-z0-9]*:)?//.*$
。这个regex应该使用i
标志。^[^\/]+\/[^\/].*$|^\/[^\/].*$
-不是最优的,有两种选择备选案文1:
^
-字符串的开头[^\/]+
-1个或多个字符,而不是/
\/
-文字/
[^\/].*$
-除/
以外的字符,后跟除换行符以外的任何0个或多个字符备选方案2:
^
-字符串的开头\/
-文字/
[^\/].*$
-除/
之外的符号,后跟除换行符以外的任何0个或多个字符,直至字符串结尾。很明显,整个regex可以缩短为
^[^/]*/[^/].*$
。可以从regex标志中安全地删除i
选项。相关问题 更多 >
编程相关推荐