从python中的字符串中删除除URL之外的所有内容

时间:2014-02-20 10:28:45

标签: python string

我正在使用python和BS4从网站上获取一系列链接,但我需要清理它们,所以我只获取字符串中的URL。

链接我看起来像这样:

  

javascript:changeChannel('http://some-server.com/with1234init.also',20);

我需要它看起来像这样

  

http://some-server.com/with1234init.also

3 个答案:

答案 0 :(得分:1)

好吧,如果所有链接都是那样的,你可以用一种非常简单的方法来实现:

s.split("'")[1]

例如:

>>>s="javascript:changeChannel('http://some-server.com/with1234init.also', 20);"
>>>s.split("'")
['javascript:changeChannel(',
 'http://some-server.com/with1234init.also',
 ', 20);']

答案 1 :(得分:0)

 str = javascript:changeChannel('http://some-server.com/with1234init.also', 20);
 formattedtext  ="http://" + str.split("http://")[1].split(',')[0].strip("'")

答案 2 :(得分:0)

一种相当健壮的方法是获取大量文本并使用URL匹配的正则表达式模式进行搜索。

另见:

使用正则表达式...

import re
re.search(pattern, text)
... or
re.findall(pattern, text)

一个完整的例子......

>>> p = re.compile(r'(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))')
or
>>> p = re.compile('(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\\\'".,<>?\xc2\xab\xc2\xbb\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x98\xe2\x80\x99]))')

>>> m = p.search("javascript:changeChannel('http://some-server.com/with1234init.also', 20);")
>>> m.group()
'http://some-server.com/with1234init.also'
  1. 使用的模式来自above link

    中的网址

    请注意在第一种模式中使用r前缀和转义'引号。

  2. 使用re.compile缓存正则表达式