Лучший способ переписать несколько добавленных методов замены, используя входной массив строк в Python? - PullRequest
0 голосов
/ 05 октября 2018

У меня действительно ужасная команда, в которой я использую множество добавленных методов replace () для замены / замены / очистки множества различных строк из исходной строки.Например:

newString = originalString.replace(' ', '').replace("\n", '').replace('()', '').replace('(Deployed)', '').replace('(BeingAssembled)', '').replace('ilo_', '').replace('ip_', '').replace('_ilop', '').replace('_ip', '').replace('backupnetwork', '').replace('_ilo', '').replace('prod-', '').replace('ilo-','').replace('(EndofLife)', '').replace('lctcvp0033-dup,', '').replace('newx-', '').replace('-ilo', '').replace('-prod', '').replace('na,', '')

Как видите, это очень уродливое утверждение, и очень трудно узнать, какие строки в длинной команде.Это также затрудняет повторное использование.

Что я хотел бы сделать, это определить входной массив из множества замещающих пар, где замещающая пара выглядит как [<ORIGINAL_SUBSTRING>, <NEW_SUBSTRING>];где больший массив выглядит примерно так:

replacementArray = [
                     [<ORIGINAL_SUBSTRING>, <NEW_SUBSTRING>],
                     [<ORIGINAL_SUBSTRING>, <NEW_SUBSTRING>],
                     [<ORIGINAL_SUBSTRING>, <NEW_SUBSTRING>],
                     [<ORIGINAL_SUBSTRING>, <NEW_SUBSTRING>]
]

И , я хотел бы передать этот replaceArray вместе с исходной строкой, которую необходимо очистить, функции, которая имеетструктурировать что-то вроде:

def replaceAllSubStrings(originalString, replacementArray):
    newString = ''
    for each pair in replacementArray:
        perform the substitution
    return newString

МОЙ ВОПРОС IS: Как правильно написать блок кода функции, чтобы применить каждую пару в replaceArray?Должен ли я использовать метод replace ()?Метод sub ()?Я не понимаю, как преобразовать исходный код в красивую чистую функцию.

Заранее благодарю за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Как насчет использования re?

import re

def make_xlat(*args, **kwds):  
    adict = dict(*args, **kwds)  
    rx = re.compile('|'.join(map(re.escape, adict)))  
    def one_xlat(match):  
        return adict[match.group(0)]  
    def xlat(text):  
        return rx.sub(one_xlat, text)  
    return xlat

replaces = {
    "a": "b",
    "well": "hello"
}

replacer = make_xlat(replaces)
replacer("a well?")
# b hello?

Вы можете добавить столько элементов в replaces, сколько захотите.

0 голосов
/ 05 октября 2018

У вас правильная идея.Используйте распаковку последовательности для итерации каждой пары значений:

def replaceAllSubStrings(originalString, replacementArray):
    for in_rep, out_rep in replacementArray:
        originalString = originalString.replace(in_rep, out_rep)
    return originalString
...