Mam problem z tym problemem. Muszę usunąć wszystkie dane zawarte w nawiasach kwadratowych.Usuwanie danych między podwójnymi nawiasami kwadratowymi a zagnieżdżonymi podpunkami pod pytonem
jak takie:
Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there.
Staje:
Hello there.
Oto moja pierwsza próba (Wiem, że to straszne):
while 1:
firstStartBracket = text.find('{{')
if (firstStartBracket == -1):
break;
firstEndBracket = text.find('}}')
if (firstEndBracket == -1):
break;
secondStartBracket = text.find('{{',firstStartBracket+2);
lastEndBracket = firstEndBracket;
if (secondStartBracket == -1 or secondStartBracket > firstEndBracket):
text = text[:firstStartBracket] + text[lastEndBracket+2:];
continue;
innerBrackets = 2;
position = secondStartBracket;
while innerBrackets:
print innerBrackets;
#everytime we find a next start bracket before the ending add 1 to inner brackets else remove 1
nextEndBracket = text.find('}}',position+2);
nextStartBracket = text.find('{{',position+2);
if (nextStartBracket != -1 and nextStartBracket < nextEndBracket):
innerBrackets += 1;
position = nextStartBracket;
# print text[position-2:position+4];
else:
innerBrackets -= 1;
position = nextEndBracket;
# print text[position-2:position+4];
# print nextStartBracket
# print lastEndBracket
lastEndBracket = nextEndBracket;
print 'pos',position;
text = text[:firstStartBracket] + text[lastEndBracket+2:];
Wydaje się działać, ale zabraknie pamięci dosyć szybko. Czy istnieje lepszy sposób to zrobić (miejmy nadzieję, z regex)?
EDYCJA: Nie było jasne, więc dam inny przykład. Muszę uwzględnić wiele nawiasów najwyższego poziomu.
takie jak:
Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there {{my }} friend.
Staje:
Hello there friend.
więc w zasadzie chcesz usunąć wszystkie rzeczy wewnątrz {}, prawda? – GLHF
Jednak jeśli nie chcesz używać stosu 'regex' do zliczania liczby otwartych nawiasów i zamkniętych, to łatwiejsze niż przykładowy kod tutaj. – Arman
@GLHF nie musi być wewnątrz {{}}, a nie tylko {} – thewormsterror