Замена строки с помощью регулярного выражения и для значения l oop в python - PullRequest
0 голосов
/ 29 января 2020

Я хочу заменить значение первой переменной, используя вторую переменную, но хочу оставить запятые. Я использовал регулярные выражения, но я не знаю, возможно ли это, потому что я все еще изучаю его. так вот мой код.

import re
names = 'Mat,Rex,Jay'
nicknames = 'AgentMat LegendRex KillerJay'
split_nicknames = nicknames.split(' ')
for a in range(len(split_nicknames)):
    replace = re.sub('\\w+', split_nicknames[a], names)
print(replace)

мой вывод:

KillerJay,KillerJay,KillerJay

и я хочу вывод, как это:

AgentMat,LegendRex,KillerJay

Ответы [ 2 ]

1 голос
/ 29 января 2020

Я подозреваю, что то, что вы ищете, должно выглядеть примерно так:

import re

testString = 'This is my complicated test string where Mat, Rex and Jay are all having a lark, but MatReyRex is not changed'
mapping = { 'Mat' : 'AgentMat',
            'Jay' : 'KillerJay',
            'Rex' : 'LegendRex'
}
reNames = re.compile(r'\b('+'|'.join(mapping)+r')\b')
res = reNames.sub(lambda m: mapping[m.group(0)], testString)
print(res)

Выполнение этого приводит к отображенному результату:

This is my complicated test string where AgentMat, LegendRex and KillerJay are all having a lark, but MatReyRex is not changed
0 голосов
/ 29 января 2020

Мы можем построить отображение следующим образом:

import re
names = 'Mat,Rex,Jay'
nicknames = 'AgentMat LegendRex KillerJay'

my_dict = dict(zip(names.split(','), nicknames.split(' ')))

replace = re.sub(r'\b\w+\b', lambda m:my_dict[m[0]], names)
print(replace)

Затем используйте лямбду, чтобы применить отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...