Вырезать из предложения часть, изменить и вставить обратно

Имеется такое предложение:

"Sum(Dictonary((12 30, 46 72, 87 1043)), Dictonary(1 1, 439534 431213.343, 4343 3)))"

Как получить массив:

[["12 30", "46 72", "87 1043"], ["1 1", "439534 431213.343", "4343 3"]]

Добавить элемент к примеру в эти массивы и вставить обратно в предложение

Пробую найти позицию элементов такой регуляркой, но она работает со словами, а с двумя скобками нет:

r'\((([^]]+))\)'

через функцию re.findall

UDP: Такой вариант уже ближе, но остаются лишние скобки

^\(\((((?!\[)(?!\]).)+)\)\)

Для модераторов: что вы подразумеваете под конкретизировать вопрос?


Ответы (2 шт):

Автор решения: gil9red

Я бы разделил обработку на 2 шага:

  • Вытаскивание целых сущностей (Dictonary)
  • Вытаскивание параметров

Пример:

import re

text = "Sum(Dictonary((12 30, 46 72, 87 1043)), Dictonary(1 1, 439534 431213.343, 4343 3)))"

items = [
    re.findall(r'[\d.]+ [\d.]+', dict_str)
    for dict_str in re.findall(r'Dictonary\(.+?\)', text)
]
print(items)
# [['12 30', '46 72', '87 1043'], ['1 1', '439534 431213.343', '4343 3']]
→ Ссылка
Автор решения: SergFSM

может, что-то вроде этого подойдет:

  • выбираем из стоки "массивы",
  • в f() делаем с ними то, что необходимо (для примера добавляем "00 00")
  • подставляем в исходную строку
from re import sub
text="Sum(Dictonary((12 30, 46 72, 87 1043)), Dictonary(1 1, 439534 431213.343, 4343 3))"
def f(x):
    return x[0]+', 00 00'
print(sub(r'(\d[\d\s,.]+\d?)',f,text))

# Sum(Dictonary((12 30, 46 72, 87 1043, 00 00)), Dictonary(1 1, 439534 431213.343, 4343 3, 00 00))
→ Ссылка