Python正则表达式替代

发布于 2021-01-29 15:02:25

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

关注者
0
被浏览
100
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您正在使用捕获组,并在使用捕获组.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/']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看