You want to generate a new text that contains all the characters in the original text, except those surrounded by parentheses. In other words, you want to measure the depth of each excerpt of the original text and discard those excerpts whose depth is greater than zero. (By "depth" I mean the amount of parentheses surrounding a particular excerpt). You settle this with an accountant and a noose for
.
The following is a pseudo procedural code for what I just described.
declare o contador de profundidade, inicialmente zerado
declare o novo texto, inicialmente vazio
para cada caractere C do texto original:
se C for o caractere de abertura:
incremente o contador de profundidade
senão:
se C for o caractere de fechamento:
decremente o contador de profundidade
senão:
Se o contador de profundidade estiver zerado:
Adicione C ao novo texto
Easy to transcribe to Python syntax.
def ignorar_caracteres_cercados(texto, char_abertura, char_fechamento):
profundidade = 0
novo_texto = ''
for c in texto:
if c == char_abertura:
profundidade += 1
elif c == char_fechamento:
profundidade -= 1
if profundidade < 0:
raise Exception('Cercamento não balanceado')
elif profundidade == 0:
novo_texto += c
if profundidade > 0:
raise Exception('Cercamento não balanceado')
return novo_texto
Note that I have taken the liberty of adding exceptions in case the characters are unbalanced. You can remove or change this as your need.
Example of use:
texto = 'hue bla bla bla (ble ble)x(bla (bla) bla) hue (((xoxoxo))) hue ()(a)()'
print(texto)
novo_texto = ignorar_caracteres_cercados(texto, '(', ')')
print(novo_texto)
And if you have parentheses within parentheses,
'bla (ble (bli))'
, should remove all the same?– Woss
I think we can adapt this algorithm (exchanging the keys in parentheses and removing the section in question instead of saving it)
– hkotsubo