osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Spread a statement over various lines


On Wednesday, September 18, 2019 at 9:01:21 AM UTC-4, Manfred Lotz wrote:
> On Wed, 18 Sep 2019 08:30:08 +0200
> Peter Otten <__peter__ at web.de> wrote:
> 
> > Manfred Lotz wrote:
> > 
> > > I have a function like follows
> > > 
> > > def regex_from_filepat(fpat):
> > >     rfpat = fpat.replace('.', '\\.') \
> > >                       .replace('%', '.')  \
> > >                       .replace('*', '.*')
> > > 
> > >     return '^' + rfpat + '$'
> > > 
> > > 
> > > As I don't want to have the replace() functions in one line my
> > > question is if it is ok to spread the statement over various lines
> > > as shown above, or if there is a better way?  
> > 
> > Sometimes you can avoid method-chaining:
> > 
> > >>> REP = str.maketrans({".": "\\.", "%": ".", "*": ".*"})
> > >>> def regex_from_filepat(fpat):  
> > ...     return fpat.translate(REP)
> > ... 
> > >>> regex_from_filepat("*foo.%")  
> > '.*foo\\..'
> > 
> 
> Very interesting. Thanks for this.

While I think that str.translate() is the right tool for this job,
here's another way to avoid line continuations (not necessarily better):

    def regex_from_filepat(fpat):
        replacements = [
            ('.', '\\.'),
            ('%', '.'),
            ('*', '.*'),
        ]

        rfpat = fpat
        for old, new in replacements:
            rfpat = rfpat.replace(old, new)

        return '^' + rfpat + '$'