Comment puis-je obtenir une chaîne après une sous-chaîne spécifique?
Par exemple, je veux la chaîne après "world"
enmy_string="hello python world , i'm a beginner "
La façon la plus simple est probablement de diviser votre mot cible
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split prend le mot (ou le caractère) à fractionner et éventuellement une limite au nombre de divisions.
Dans cet exemple, divisez sur "monde" et limitez-le à une seule division.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(ou...[2]
) est plus rapide.Si vous voulez traiter le cas où il
s2
n'est pas présents1
, utilisezs1.find(s2)
plutôt queindex
. Si la valeur de retour de cet appel est-1
, alors ces2
n'est pas le cass1
.la source
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Je suis surpris que personne n'ait mentionné
partition
.À mon humble avis, cette solution est plus lisible que celle de @ arshajii. En dehors de cela, je pense que @ arshajii est le meilleur pour être le plus rapide - il ne crée pas de copies / sous-chaînes inutiles.
la source
str.split(..., 1)
.Vous souhaitez utiliser
str.partition()
:car cette option est plus rapide que les alternatives .
Notez que cela produit une chaîne vide si le délimiteur est manquant:
Si vous souhaitez avoir la chaîne d'origine, testez si la deuxième valeur renvoyée par
str.partition()
n'est pas vide:Vous pouvez également utiliser
str.split()
avec une limite de 1:Cependant, cette option est plus lente . Dans le meilleur des cas,
str.partition()
est facilement environ 15% plus rapide par rapport àstr.split()
:Cela montre les temps par exécution avec des entrées ici, le délimiteur est soit manquant (pire scénario), placé en premier (meilleur scénario), soit dans la moitié inférieure, la moitié supérieure ou la dernière position. Le temps le plus rapide est marqué par
[...]
et<...>
marque le pire.Le tableau ci-dessus est produit par un contre-la-montre complet pour les trois options, produit ci-dessous. J'ai exécuté les tests sur Python 3.7.4 sur un Macbook Pro 15 pouces de modèle 2017 avec Intel Core i7 à 2,9 GHz et 16 Go de RAM.
Ce script génère des phrases aléatoires avec et sans le délimiteur sélectionné au hasard, et s'il est présent, à différentes positions dans la phrase générée, exécute les tests dans un ordre aléatoire avec des répétitions (produisant les résultats les plus équitables tenant compte des événements aléatoires du système d'exploitation se produisant pendant les tests), puis imprime un tableau des résultats:
la source
Si vous voulez le faire en utilisant l'expression régulière, vous pouvez simplement utiliser un groupe non capturant , pour obtenir le mot "monde" et ensuite récupérer tout après, comme ça
L'exemple de chaîne est testé ici
la source
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Vous pouvez utiliser ce package appelé "sous-chaîne". Tapez simplement "pip install substring". Vous pouvez obtenir la sous-chaîne en mentionnant simplement les caractères / index de début et de fin.
Par exemple:
Production:
s = defghijklmn
la source
C'est une vieille question mais j'ai fait face au même scénario, j'ai besoin de diviser une chaîne en utilisant comme démilitre le mot "bas" le problème pour moi était que j'ai dans la même chaîne le mot ci-dessous et plus bas.
Je l'ai résolu en utilisant le module re de cette façon
utilisez re.split avec regex pour faire correspondre le mot exact
le code générique est:
J'espère que cela peut aider quelqu'un!
la source
string.partition(" low ")[2]
:? (Notez les espaces de chaque côté delow
Essayez cette approche générale:
la source
Dans Python 3.9, une nouvelle
removeprefix
méthode est ajoutée:la source