我正在尝试以的形式找到网页上的所有链接,"http://something"或者https://something.我做了一个正则表达式,并且可以正常工作:
"http://something"
https://something.
L = re.findall(r"http://[^/\"]+/|https://[^/\"]+/", site_str)
但是,有没有更短的写方法呢?我重复了:// [^ / \“] + /两次,可能没有必要。我尝试了各种方法,但是没有用。我尝试了:
L = re.findall(r"http|https(://[^/\"]+/)", site_str) L = re.findall(r"(http|https)://[^/\"]+/", site_str) L = re.findall(r"(http|https)(://[^/\"]+/)", site_str)
很明显,我在这里缺少了一些东西,或者我只是对Python正则表达式不够了解。
您正在使用捕获组,并在使用捕获组.findall()时改变其行为(它只会返回捕获组的内容)。您的正则表达式可以简化,但是如果您使用 非 捕获组,则您的版本可以使用:
.findall()
L = re.findall(r"(?:http|https)://[^/\"]+/", site_str)
如果在表达式周围使用单引号,则不需要转义双引号,并且只需更改s表达式中的,因此s?也可以工作:
s
s?
L = re.findall(r'https?://[^/"]+/', site_str)
演示:
>>> import re >>> example = ''' ... "http://someserver.com/" ... "https://anotherserver.com/with/path" ... ''' >>> re.findall(r'https?://[^/"]+/', example) ['http://someserver.com/', 'https://anotherserver.com/']