一尘不染

Python正则表达式替代

python

我正在尝试以的形式找到网页上的所有链接,"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正则表达式不够了解。


阅读 208

收藏
2021-01-20

共1个答案

一尘不染

您正在使用捕获组,并在使用捕获组.findall()时改变其行为(它只会返回捕获组的内容)。您的正则表达式可以简化,但是如果您使用 捕获组,则您的版本可以使用:

L = re.findall(r"(?:http|https)://[^/\"]+/", site_str)

如果在表达式周围使用单引号,则不需要转义双引号,并且只需更改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/']
2021-01-20