[]re.sub] Substituir Substring entre duas strings

44 views
Skip to first unread message

William Scardua

unread,
Jun 22, 2021, 7:14:19 PM6/22/21
to Python Brasil
Ola amigos,

Estou tentando substituir uma substring entre duas substrings, para isso estou usando re.sub mas nâo consigo acertar o regex

linha = ' campo1; campo2; "campo3; campo4" campo5' 

# remover o ponto e virgula que esta entre o 'campo3' e 'campo4' e que por conseguinte
# estâo entre aspas duplas

print(re.sub(r' "(.*?)" ', '#', linha, flags=re.DOTALL))

Resultado >  campo1; campo2; # campo5

Alguém pode dar um help

Joao S. O. Bueno

unread,
Jun 23, 2021, 9:23:46 AM6/23/21
to python...@googlegroups.com
1) não dá pra entender o que você quer como resultado final. Só tirar o ";"? remover as aspas?  remover as aspas e colocar um ";" depois de "campo4"? 
2) Expressão regular nem sempre é o melhor jeito de resolver os problemas com substituição de texto. Apesar de quase sempre ser possível usar expressões regulares, elas são uma outra linguagem de programação - embutida no Python, e que tem características de legibilidade e de expressão diferentes. As vezes vale a pena usar 5-6 linhas de código com "for" e "if" para realizar uma ação - mesmo quando á possível fazer em uma única regexp, pela simples questão do tempo que vai demorar para chegar na regex exata, e de como vai ser dar manutenção nisso depois.



--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/be33642b-9de8-47e3-94ad-17e268cfea33n%40googlegroups.com.

Lucas Brahm

unread,
Jun 23, 2021, 1:32:20 PM6/23/21
to python...@googlegroups.com
Não ficou claro o resultado que você quer.

Seria isso?

print(re.sub(r'(?<=\s)"(.*?)"(?=\s)', '#', linha, flags=re.DOTALL))

Resultado: campo1; campo2; # campo5

Gabriel Monteiro

unread,
Jun 23, 2021, 10:12:27 PM6/23/21
to Python Brasil
Se eu entendi bem essa seria a solução. Você só quer substituir o ponto e virgula entre o campo3  e campo4.

>>> linha = ' campo1; campo2; "campo3; campo4" campo5'
>>> re.sub(r'(.*".*)(;)(.*".*)', r"\1#\3", linha)
' campo1; campo2; "campo3# campo4" campo5'
Reply all
Reply to author
Forward
0 new messages