Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于提取URL的Python正则表达式_Python_Expression - Fatal编程技术网

用于提取URL的Python正则表达式

用于提取URL的Python正则表达式,python,expression,Python,Expression,我正在研究正则表达式,想知道如何从HTML页面提取URL。 我想从这行打印出url: Website is: http://www.somesite.com 每次找到该链接时,我只想提取**网站是:* 任何帮助都将不胜感激。这就足够了,还是您需要更具体一些 In [230]: s = 'Website is: http://www.somesite.com ' In [231]: re.findall('Website is:\s+(\S+)', s) Out[231]: ['http://

我正在研究正则表达式,想知道如何从HTML页面提取URL。 我想从这行打印出url:

Website is: http://www.somesite.com 
每次找到该链接时,我只想提取
**网站是:*

任何帮助都将不胜感激。

这就足够了,还是您需要更具体一些

In [230]: s = 'Website is: http://www.somesite.com '
In [231]: re.findall('Website is:\s+(\S+)', s)
Out[231]: ['http://www.somesite.com']

您可以将每一行与带有捕获组的正则表达式相匹配,如下所示:

for l in page:
    m = re.match("Website is: (.*)")
    if m:
        print m.groups()[0]
这将检查每条线是否与模式匹配,并从中提取链接

有几个陷阱:

  • 这假设“Website is”表达式始终位于行的开头。如果不是,您可以使用
    re.search

  • 这假设冒号和网站之间只有一个空格。如果不是这样,您可以将表达式更改为类似
    的内容,网址是:\s+(http.*)


  • 具体细节将取决于您试图解析的页面。

    Regex可能会有点过分,因为它太简单了

    def main():
        urls = []
        file = prepare_file("<yourfile>.html")
        for i in file:
             if "www" in i or "http://" in i:
                 urls.append(i)
        return urls
    
    
    def prepare_file(filename):
        file = open(filename)
        a = file.readlines() #splits on new lines
        a = [ i.strip() for i in [ x for x in a ] ] #remove white space
        a = filter(lambda x : x != '', a) #remove empty elements
        return a
    
    def main():
    URL=[]
    文件=准备文件(“.html”)
    对于文件中的i:
    如果i中的“www”或i中的“http://”:
    url.append(i)
    返回URL
    def准备_文件(文件名):
    文件=打开(文件名)
    a=file.readlines()#在新行上拆分
    a=[i.strip()代表i in[x代表x in a]]#删除空白
    a=过滤器(λx:x!='',a)#移除空元素
    归还
    
    据我所读到的,用正则表达式捕捉URL很难

    可能使用以下正则表达式模式对您有好处:

    pat = 'Website is: (%s)' % fireball
    
    其中fireball是一种捕获URL的模式,您可以在此处找到:


    这是一个更好的答案,但如果url周围有
    /
    标记,则会有陷阱。我必须承认,如果是我,我会使用Google上的
    url提取
    ReExp配方之一。我做了最简单的事情。谢谢。我试过这个,它成功了。多亏了其他人的大量投入:)@sotapme问题在于HTML确实不利于正则表达式的使用。有一些库可以为您解析它,比如BeautifulSoup,这将使处理此问题的错误几率大大降低。虽然我原则上同意使用regexps来摸索HTML通常是个坏主意,但OP在文本外观方面非常具体,因此它实际上只是一个文本块,当然,如果它作为结构化文档跨HTML执行
    re
    ,那么这将是一个坏主意。如果我是OP,我可能会尝试使用HTML并从文档中获取
    text()
    ,以消除任何标记。