Temos dados de uma chamada de API REST armazenados em um arquivo de saída que se parece com o seguinte:
Arquivo de entrada de exemplo:
test test123 - test (bla bla1 (On chutti))
test test123 bla12 teeee (Rinku Singh)
balle balle (testagain) (Rohit Sharma)
test test123 test1111 test45345 (Surya) (Virat kohli (Lagaan))
testagain blae kaun hai ye banda (Ranbir kapoor (Lagaan), Milkha Singh (On chutti) (Lagaan))
Saída esperada:
bla bla1
Rinku Singh
Rohit Sharma
Virat kohli
Ranbir kapoor, Milkha Singh
Condições para derivar a saída esperada:
- Considere sempre a última ocorrência de parênteses () em cada linha. Precisamos extrair os valores dentro deste último par de parênteses mais externo.
- Dentro da última ocorrência de (), extraia todos os valores que aparecem antes de cada ocorrência de parênteses aninhados ().
- Por exemplo:
test test123 - test (bla bla1 (On chutti))
o último parêntesis começa de(bla
até até,chutti))
então preciso,bla bla1
pois é antes de inner(On chutti)
. Então, procure o último parêntesis e, em seguida, dentro de quantos pares de parêntesis vêm, precisamos obter dados antes deles, por exemplo: na linhatestagain blae kaun hai ye banda (Ranbir kapoor (Lagaan), Milkha Singh (On chutti) (Lagaan))
necessário éRanbir kapoor
eMilkha Singh
.
Tentativa de expressão regular: Tentei usar a seguinte expressão regular na demonstração funcional do regex :
Expressão regular:
^(?:^[^(]+\([^)]+\) \(([^(]+)\([^)]+\)\))|[^(]+\(([^(]+)\([^)]+\),\s([^\(]+)\([^)]+\)\s\([^\)]+\)\)|(?:(?:.*?)\((.*?)\(.*?\)\))|(?:[^(]+\(([^)]+)\))$
O Regex que testei está funcionando bem, mas quero melhorá-lo com o conselho de especialistas aqui.
Idiomas Preferidos: Procurando melhorar este regex OU um python, a resposta awk também está ok. Eu mesmo também tentarei adicionar uma awk
resposta.