Eu tenho um conjunto de strings set1
, e todas as strings set1
possuem duas substrings específicas que eu não preciso e quero remover.
Entrada de amostra:
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}
Então, basicamente, quero que as substrings .good
e sejam .bad
removidas de todas as strings.
O que eu tentei:
for x in set1:
x.replace('.good','')
x.replace('.bad','')
Mas isso parece não funcionar. Não há absolutamente nenhuma alteração na saída e é igual à entrada. Eu tentei usar em for x in list(set1)
vez do original, mas isso não muda nada.
fonte
string.replace()
foi preterido no python 3.x, agora éstr.replace()
.replace
não altera a string, ele retorna uma cópia da string com a substituição. Você não pode alterar a string diretamente, porque as strings são imutáveis.Você precisa pegar os valores de retorno
x.replace
e colocá-los em um novo conjunto.fonte
Tudo que você precisa é de um pouco de magia negra!
fonte
Você pode fazer isso:
fonte
x.replace('.good',' ')
ex.replace('.bad',' ')
não faz nada com o resultado final. A impressão será a mesma sem eles.re.sub
, assim:x = re.sub('((\.good$)|(\.bad$))', '', x)
replace
s e mover tudo para umare.sub
chamada)Fiz o teste (mas não é o seu exemplo) e os dados não os retornam em ordem ou estão completos
Eu provei que isso funciona:
ou
fonte
Quando há várias substrings a serem removidas, uma opção simples e eficaz é usar
re.sub
com um padrão compilado que envolve a união de todas as substrings a serem removidas usando o|
tubo regex OR ( ).fonte
Se lista
Eu estava fazendo algo para uma lista que é um conjunto de seqüências de caracteres e você deseja remover todas as linhas que possuem uma certa substring, você pode fazer isso
onde
sub
está um padrão que você não deseja ter em uma lista de linhasLinSplitUnOr
por exemplo
Então
A
seráfonte
se você excluir algo da lista, você poderá usar desta forma: (o método sub diferencia maiúsculas de minúsculas)
fonte