Мне нужно создать и изменить регулярные выражения, которые должны соответствовать любому ключу или значению в словаре.
Выполнить это в Ruby относительно просто, например, так:
names = {"John White"=>"一","George Black"=>"二","Mary Jane Fields"=>"三"}
string = "This involves John White (from now on: 'JW'), George Black (from now on: 'GB') and Mary Jane Fields (from now on: 'MJF'). JW wanted GB to tell MJF that he (GB) was with JW when MJF called JW."
names.each do |k,v|
string.gsub! k,v
end
names.each_value do |v|
short_name = /(#{v}) \(from now on: '(.{2,4})'\)/.match(string).to_a
string.gsub! short_name[2].to_s, short_name[1].to_s
end
puts string
Это дает следующий результат:
This involves 一 (from now on: '一'), 二 (from now on: '二') and 三 (from now on: '三'). 一 wanted 二 to tell 三 that he (二) was with 一 when 三 called 一.
где все имена ( реальное имя и имя adho c, данное после "отныне:"), были заменены значением в га sh.
При попытке обновить аналогичную программу из Ruby в Python, однако, у меня возникают проблемы при вставке ключа / значений в регулярное выражение в команде re.sub или аналогичной. Начало кода работает нормально, если выполняется следующим образом:
import re
names = {"John White":"一","George Black":"二","Mary Jane Fields":"三"}
string = "This involves John White (from now on: JW), George Black (from now on: GB) and Mary Jane Fields (from now on: MJF). JW wanted GB to tell MJF that he (GB) was with JW when MJF called JW."
for key,value in names.items():
string = re.sub(str(key),str(value),string)
print(string)
Но второе преобразование сложно, поскольку я не могу ввести значение в выражение регулярного выражения. Все последующие дают разные ошибки или просто не совпадают. Например, следующее создает объекты соответствия, но не захватывает и не изменяет строку:
for value in names.values():
pattern = re.search(str(value)+' \(from now on: (.{2,4})\)',string)
string = re.sub(str(pattern),str(value),string)
Многие другие вещи также не работают. Любой способ включить вызовы в значения словаря внутри выражений регулярных выражений? В частности, в команде re.sub?
Большое спасибо.