【问题标题】:python regex urlspython正则表达式网址
【发布时间】:2012-12-07 12:39:21
【问题描述】:

我有一堆(如果我可以说很难看)url,我想使用 python 正则表达式来清理它们。所以,我的网址看起来像:

http://www.thisislink1.com/this/is/sublink1/1
http://www.thisislink2.co.uk/this/is/sublink1s/klinks
http://www.thisislinkd.co/this/is/sublink1/hotlinks/2
http://www.thisislinkf.com.uk/this/is/sublink1d/morelink
http://www.thisislink1.co.in/this/is/sublink1c/mylink
....

我想做的是清理这些网址,使最终链接看起来像:

http://www.thisislink1.com
http://www.thisislink2.co.uk
http://www.thisislinkd.co
http://www.thisislinkf.de
http://www.thisislink1.us
....

我想知道如何以 Python 的方式实现这一点。抱歉,如果这是一个 101 问题 - 我是 pytho 正则表达式结构的新手。

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    使用urlparse.urlsplit:

    In [3]: import urlparse    
    
    In [8]: url = urlparse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1')
    
    In [9]: url.netloc
    Out[9]: 'www.thisislink1.com'
    

    在 Python3 中是

    import urllib.parse as parse
    url = parse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1')
    

    【讨论】:

      【解决方案2】:

      为什么要使用正则表达式?

      >>> import urlparse
      >>> url = 'http://www.thisislinkd.co/this/is/sublink1/hotlinks/2'
      >>> urlparse.urlsplit(url)
      SplitResult(scheme='http', netloc='www.thisislinkd.co', path='/this/is/sublink1/hotlinks/2', query='', fragment='')
      

      【讨论】:

      • 太棒了。我不知道 urlparse - 我必须说非常方便。再次感谢。我已经接受了你的回答。 urlparse.urlsplit(url).netloc 解决了这个问题。
      • 刚刚看到@unutbu 先到了那里(几秒钟),跟他们一起去吧!
      • 好的 Jon - 我会接受 unutbu 的回答 - 再次感谢您的帮助!
      【解决方案3】:

      您应该像其他人建议的那样使用 URL 解析器,但为了完整起见,这里有一个正则表达式的解决方案:

      import re
      
      url='http://www.thisislink1.com/this/is/sublink1/1'
      
      re.sub('(?<![/:])/.*','',url)
      
      >>> 'http://www.thisislink1.com'
      

      解释:

      匹配前面没有:/的第一个正斜杠之后的所有内容,并将其替换为无''

      (?<![/:]) # Negative lookbehind for '/' or ':'
      /.*       # Match a / followed by anything
      

      【讨论】:

        【解决方案4】:

        也许使用这样的东西:

        result = re.sub(r"(?m)(http://(www)?\..*?)/", r"\1", subject)
        

        【讨论】:

          猜你喜欢
          • 2014-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-15
          • 1970-01-01
          相关资源
          最近更新 更多