Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #38341 > unrolled thread

Re: Curious to see alternate approach on a search/replace via regex

Started byPeter Otten <__peter__@web.de>
First post2013-02-07 10:49 +0100
Last post2013-02-07 10:49 +0100
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Curious to see alternate approach on a search/replace via regex Peter Otten <__peter__@web.de> - 2013-02-07 10:49 +0100

#38341 — Re: Curious to see alternate approach on a search/replace via regex

FromPeter Otten <__peter__@web.de>
Date2013-02-07 10:49 +0100
SubjectRe: Curious to see alternate approach on a search/replace via regex
Message-ID<mailman.1444.1360230550.2939.python-list@python.org>
rh wrote:

> I am curious to know if others would have done this differently. And if so
> how so?
> 
> This converts a url to a more easily managed filename, stripping the
> http protocol off.
> 
> This:
>  
> http://alongnameofasite1234567.com/q?sports=run&a=1&b=1
> 
> becomes this:
> 
> alongnameofasite1234567_com_q_sports_run_a_1_b_1
> 
> 
> def u2f(u):
>     nx = re.compile(r'https?://(.+)$')
>     u = nx.search(u).group(1)
>     ux = re.compile(r'([-:./?&=]+)')
>     return ux.sub('_', u)
> 
> One alternate is to not do the compile step. There must also be a way to
> do it all at once. i.e. remove the protocol and replace the chars.

Completely without regular expressions:

import string

ILLEGAL = "-:./?&="
try:
    TRANS = string.maketrans(ILLEGAL, "_" * len(ILLEGAL))
except AttributeError:
    # python 3
    TRANS = dict.fromkeys(map(ord, ILLEGAL), "_")

PROTOCOLS = {"http", "https"}

def url_to_file(url):
    protocol, sep, rest = url.partition("://")
    if protocol not in PROTOCOLS:
        raise ValueError
    return rest.translate(TRANS)

if __name__ == "__main__":
    url = "http://alongnameofasite1234567.com/q?sports=run&a=1&b=1"
    print(url)
    print(url_to_file(url))

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web