Iterative find/replace from a list of tuples in Python

前端 未结 5 1592
走了就别回头了
走了就别回头了 2020-12-17 05:37

I have a list of tuples, each containing a find/replace value that I would like to apply to a string. What would be the most efficient way to do so? I will be applying this

相关标签:
5条回答
  • 2020-12-17 05:41

    You could consider using re.sub:

    import re
    REPLACEMENTS = dict([('find1', 'replace1'),
                         ('find2', 'replace2'),
                         ('find3', 'replace3')])
    
    def replacer(m):
        return REPLACEMENTS[m.group(0)]
    
    x = 'find1, find2, find3'
    r = re.compile('|'.join(REPLACEMENTS.keys()))
    print r.sub(replacer, x)
    
    0 讨论(0)
  • 2020-12-17 05:42

    A couple notes:

    1. The boilerplate argument about premature optimization, benchmarking, bottlenecks, 100 is small, etc.
    2. There are cases where the different solutions will return different results. if y = [('one', 'two'), ('two', 'three')] and x = 'one' then mhawke's solution gives you 'two' and Unknown's gives 'three'.
    3. Testing this out in a silly contrived example mhawke's solution was a tiny bit faster. It should be easy to try it with your data though.
    0 讨论(0)
  • 2020-12-17 05:49
    x = 'find1, find2, find3'
    y = [('find1', 'replace1'), ('find2', 'replace2'), ('find3', 'replace3')]
    
    def processThis(str,lst):
        for find, replace in lst:
            str = str.replace(find, replace)
    
        return str
    
    >>> processThis(x,y)
    'replace1, replace2, replace3'
    
    0 讨论(0)
  • 2020-12-17 05:55
    s = reduce(lambda x, repl: str.replace(x, *repl), lst, s)
    
    0 讨论(0)
  • 2020-12-17 05:55

    Same answer as mhawke, enclosed with method str_replace

    def str_replace(data, search_n_replace_dict):
        import re
        REPLACEMENTS = search_n_replace_dict
    
        def replacer(m):
            return REPLACEMENTS[m.group(0)]
    
        r = re.compile('|'.join(REPLACEMENTS.keys()))
        return r.sub(replacer, data)
    

    Then we can call this method with example as below

    s = "abcd abcd efgh efgh;;;;;; lkmnkd kkkkk"
    d = dict({ 'abcd' : 'aaaa', 'efgh' : 'eeee', 'mnkd' : 'mmmm' })
    
    
    print (s)
    print ("\n")
    print(str_replace(s, d))
    

    output :

    abcd abcd efgh efgh;;;;;; lkmnkd kkkkk
    
    
    aaaa aaaa eeee eeee;;;;;; lkmmmm kkkkk
    
    0 讨论(0)
提交回复
热议问题