我试图获取文件中给出的所有链接。所有链接都包含在""还有http,https和ftp链接。下面是该文件的示例输出。
$ cat file
"http://www.google.com" and "http://www.yahoo.com" and "http://www.facebook.com"
"https://1.1.1.1" and "ftp://a.a.a.a"
下面是我的python代码
In [109]: FILE = open('file','r')
In [110]: data = FILE.read()
In [111]: links = re.findall('"((http|ftp)s?://.*?)"', data)
In [112]: print links
[('http://www.google.com', 'http'), ('http://www.yahoo.com', 'http'), ('http://www.facebook.com', 'http'), ('https://1.1.1.1', 'http'), ('ftp://a.a.a.a', 'ftp')]
为什么输出包含' http'原始链接后。我哪里做错了? 有人可以请帮助。我在Python 2.7.6中使用(IPython 2.3.1)
答案 0 :(得分:2)
因为你的正则表达式包含两个捕获组。第一个捕获组捕获整个链接,而另一个捕获组仅捕获http
,ftp
部分。我建议你将第二个捕获组转为非捕获组,因为re.findall
函数给出了捕获组的第一个偏好。如果在正则表达式中找不到捕获组,则只返回匹配。
re.findall(r'"((?:http|ftp)s?://.*?)"', data)
示例:强>
>>> s = '''"http://www.google.com" and "http://www.yahoo.com" and "http://www.facebook.com"
"https://1.1.1.1" and "ftp://a.a.a.a"'''
>>> re.findall(r'"((?:http|ftp)s?://.*?)"', s)
['http://www.google.com', 'http://www.yahoo.com', 'http://www.facebook.com', 'https://1.1.1.1', 'ftp://a.a.a.a']
答案 1 :(得分:0)
如果您的所有文件都是这样,您可以拆分并剥离:
lines=""""http://www.google.com" and "http://www.yahoo.com" and "http://www.facebook.com"
"https://1.1.1.1" and "ftp://a.a.a.a"""
print([x.strip('"') for x in lines.split(" and ")])
['http://www.google.com', 'http://www.yahoo.com', 'http://www.facebook.com"\n"https://1.1.1.1', 'ftp://a.a.a.a']