Python正则表达式交替

时间:2013-06-01 17:39:29

标签: python regex

我正在尝试以"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正则表达式。

1 个答案:

答案 0 :(得分:10)

您正在使用捕获组和.findall() alters behaviour when you use those(它只会返回捕获组的内容)。您的正则表达式可以简化,但如果您使用 - 捕获组,您的版本将会起作用:

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/']