Вырезать из предложения часть, изменить и вставить обратно
Имеется такое предложение:
"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))