Como posso obter uma string após uma substring específica?
Por exemplo, quero obter a sequência depois "world"
demy_string="hello python world , i'm a beginner "
A maneira mais fácil é provavelmente dividir a palavra-alvo
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split usa a palavra (ou caractere) para dividir e, opcionalmente, um limite para o número de divisões.
Neste exemplo, divida em "mundo" e limite-o a apenas uma divisão.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(ou...[2]
) é mais rápido.Se você deseja lidar com o caso em que não
s2
está presente , use o oposto de . Se o valor de retorno dessa chamada for , ele não estará .s1
s1.find(s2)
index
-1
s2
s1
fonte
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Estou surpreso que ninguém tenha mencionado
partition
.IMHO, esta solução é mais legível que a do @ arshajii. Fora isso, acho que o @ arshajii's é o melhor por ser o mais rápido - ele não cria cópias / substrings desnecessárias.
fonte
str.split(..., 1)
.Você quer usar
str.partition()
:porque esta opção é mais rápida que as alternativas .
Observe que isso produz uma cadeia vazia se o delimitador estiver ausente:
Se você deseja ter a sequência original, teste se o segundo valor retornado
str.partition()
não está vazio:Você também pode usar
str.split()
com um limite de 1:No entanto, esta opção é mais lenta . Para um cenário de melhor caso,
str.partition()
é facilmente cerca de 15% mais rápido em comparação comstr.split()
:Isso mostra os tempos por execução com entradas aqui, onde o delimitador está ausente (cenário de pior caso), colocado em primeiro lugar (cenário de melhor caso) ou na metade inferior, metade superior ou última posição. O tempo mais rápido é marcado com
[...]
e<...>
marca o pior.A tabela acima é produzida por um contra-relógio abrangente para as três opções, produzidas abaixo. Executei os testes no Python 3.7.4 em um Macbook Pro de 15 "modelo 2017 com Intel Core i7 a 2,9 GHz e ram de 16 GB.
Esse script gera sentenças aleatórias com e sem o delimitador selecionado aleatoriamente presente e, se presente, em diferentes posições da sentença gerada, executa os testes em ordem aleatória com repetições (produzindo resultados mais justos, contabilizando eventos aleatórios do SO ocorridos durante o teste), e depois imprime uma tabela dos resultados:
fonte
Se você quiser fazer isso usando regex, você pode simplesmente usar um grupo que não captura , para obter a palavra "mundo" e depois pegar tudo depois, assim
A sequência de exemplo é testada aqui
fonte
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Você pode usar este pacote chamado "substring". Basta digitar "pip install substring". Você pode obter a substring apenas mencionando os caracteres / índices de início e fim.
Por exemplo:
Resultado:
s = defghijklmn
fonte
É uma pergunta antiga, mas enfrentei o mesmo cenário. Preciso dividir uma string usando como desmilitro a palavra "low". O problema para mim é que tenho na mesma string a palavra abaixo e abaixo.
Eu resolvi usando o módulo re desta maneira
use re.split com regex para corresponder à palavra exata
o código genérico é:
Espero que isso possa ajudar alguém!
fonte
string.partition(" low ")[2]
:? (Observe os espaços em ambos os lados dolow
Tente esta abordagem geral:
fonte
No Python 3.9, um novo
removeprefix
método está sendo adicionado:fonte