Python >> Tutoriel Python >  >> Python

Comment couper une chaîne en Python ?

Problème : Étant donné une chaîne ; comment diviser/couper la chaîne et extraire les caractères requis ?

Dans cet article, nous discuterons de certains scénarios intéressants qui nous permettent de diviser ou de couper une chaîne et d'extraire la partie nécessaire de la chaîne dont nous avons besoin. Plongeons-nous dans chaque exemple/scénario et voyons comment nous pouvons réussir à couper la chaîne en fonction des exigences de chaque scénario.

✨ Scénario 1

Formulation du problème

Étant donné la chaîne suivante :

s = 'http://www.example.com/?s=something&two=20'

Exigence :

Vous devez diviser la chaîne de sorte que tout ce qui se trouve après & dans la chaîne donnée ("url") est négligé, c'est-à-dire que la chaîne de sortie doit être la suivante :

s = 'http://www.example.com/?s=something

◈ Méthode 1 :Utilisation de la méthode split()

split() est une méthode intégrée à Python qui est utilisée pour couper/diviser une chaîne donnée en fonction d'un séparateur donné. Vous pouvez spécifier n'importe quel séparateur en fonction de vos besoins, cependant, par défaut, le séparateur est un espace.

Syntaxe :

  • séparateur est un paramètre facultatif utilisé pour spécifier le séparateur (délimiteurs). Par défaut, il s'agit de n'importe quel caractère d'espacement.
  • maxsplit est un paramètre facultatif qui nous permet de spécifier le nombre maximum de fractionnements que nous voulons effectuer. Par défaut sa valeur est -1 c'est-à-dire "toutes les occurrences".

La solution :Vous pouvez utiliser le split() méthode et spécifiez le séparateur en fonction duquel vous souhaitez couper la chaîne, puis extrayez la section de la chaîne de la liste générée par le split() fonction. Voyons comment cela peut être implémenté dans le morceau de code suivant :

s = 'http://www.example.com/?s=something&two=20'
print(s.split('&')[0])

Sortie :

http://www.example.com/?s=something

◈ Méthode 2 :Utiliser la méthode rfind() et découper la chaîne

Nous devons extraire la partie de la chaîne qui précède le & personnage. Par conséquent, une solution simple à notre problème consiste à trouver l'index du & caractère dans la chaîne à l'aide du rfind() fonction, puis découpez la chaîne à l'aide de l'index.

Remarque : Le rfind() La méthode est utilisée pour trouver la dernière occurrence d'une valeur spécifiée.

La solution

s = 'http://www.example.com/?s=something&two=20'
print(s[:s.rfind('&')])

Sortie :

http://www.example.com/?s=something

◈ Méthode 3 :Utilisation de la méthode index()

Une autre approche simple pour couper la chaîne donnée consiste à la découper en utilisant la méthode d'index. Le index(value) la méthode renvoie l'index du value arguments . Voyons la procédure pour implémenter le index(value) méthode et cracher notre chaîne.

s = 'http://www.example.com/?s=something&two=20'
print(s[:s.index('&')])

Sortie :

http://www.example.com/?s=something

Dans ce scénario, la tâche de couper la chaîne était assez simple car il y avait un seul délimiteur et tout ce que nous avions à faire était de séparer la chaîne en fonction du délimiteur & . Que faire si vous souhaitez extraire la chaîne en éliminant plusieurs caractères ou séquences. Cela nous amène au scénario suivant !

✨ Scénario 2

Formulation du problème

Étant donné une chaîne composée de chiffres, de lettres et de caractères spéciaux ; comment diviser la chaîne chaque fois qu'un caractère spécial ou un nombre apparaît ?

Exemple

string = "Finxter$#! Academy Python111Freelancing"

Résultat souhaité

['Finxter', 'Academy', 'Python', 'Freelancing']

◈ Méthode 1 :Utiliser re.split

Le re.split(pattern, string) la méthode correspond à toutes les occurrences de pattern dans le string et divise la chaîne le long des correspondances, ce qui donne une liste de chaînes entre  les matchs. Par exemple, re.split('a', 'bbabbbab') résultats dans la liste des chaînes ['bb', 'bbb', 'b'] .

La solution

import re

s = "Finxter$#! Academy Python111Freelancing"
res = re.split('\d+|\W+', s)
print(res)

Sortie :

['Finxter', 'Academy', 'Python', 'Freelancing']

Remarque :

  • Le \d le caractère spécial correspond à n'importe quel chiffre entre 0 et 9.
  • \W est une séquence spéciale qui renvoie une correspondance lorsqu'elle ne trouve aucun caractère de mot dans la chaîne donnée. Ici, il est utilisé pour trouver les délimiteurs lors du fractionnement de la chaîne.

Si vous souhaitez également stocker les séparateurs, veuillez consulter ce tutoriel qui vous répondra en détail.

◈ Méthode 2 :Utiliser itertools.groupby()

  • Le itertools.groupby(iterable, key=None) la fonction crée un itérateur qui renvoie des tuples (key, group-iterator) regroupés par chaque valeur de key . Nous utilisons le str.isalpha() fonction comme fonction clé.
  • Le str.isalpha() la fonction renvoie True si la chaîne se compose uniquement de caractères alphabétiques.

La solution

from itertools import groupby
s = "Finxter$#! Academy Python111Freelancing"
r=[]
res = [''.join(g) for _, g in groupby(s, str.isalpha)]
for item in res:
    if item.isalpha():
        r.append(item)
print(r)

Sortie :

['Finxter', 'Academy', 'Python', 'Freelancing']

✨ Scénario 3

Si vous traitez spécifiquement des URL, vous voudrez utiliser des bibliothèques intégrées qui traitent des URL.

Exemple : Vous souhaitez supprimer two=20 à partir de la chaîne de requête donnée ci-dessous :

s='http://www.domain.com/?s=some&two=20'

Résultat souhaité :

http://www.domain.com/?s=some

Solution

  • Étape 1 :analyser l'intégralité de l'URL.
  • Étape 2 :extrayez la chaîne de requête.
  • Étape 3 :Convertissez-le en dictionnaire Python .
  • Étape 4 :Supprimez la clé "deux" du dictionnaire.
  • Étape 5 :Remettez-le dans la chaîne de requête.
  • Étape 6 :Rassemblez l'URL.

Jetons un coup d'œil au programme suivant qui montre le processus exact comme expliqué dans les étapes ci-dessus. (Veuillez suivre les commentaires dans le code !)

import urllib.parse

# Step 1: parse the entire URL
parse_result = urllib.parse.urlsplit("http://www.example.com/?s=something&two=20")
# Step 2: Extract the query string
query_s = parse_result.query
# Step 3: Convert it to a Python dictionary
query_d = urllib.parse.parse_qs(parse_result.query)
# Step 4: remove the ['two'] key from the dictionary
del query_d['two']
# Step 5: Put it back to the query string
new_query_s = urllib.parse.urlencode(query_d, True)
# Step 6: Stitch the URL back together
result = urllib.parse.urlunsplit((
    parse_result.scheme, parse_result.netloc,
    parse_result.path, new_query_s, parse_result.fragment))
print(result)

Sortie :

http://www.example.com/?s=something

L'avantage d'utiliser la procédure ci-dessus est que vous avez plus de contrôle sur l'URL. Par exemple, si vous souhaitez uniquement supprimer le two argument de la chaîne de requête même s'il s'est produit plus tôt dans la chaîne de requête ("two=20&s=something" ), cela serait toujours fonctionnel et fonctionnerait parfaitement bien.

Conclusion

Dans cet article, vous avez appris quelques concepts importants concernant le fractionnement d'une chaîne en Python. Sélectionnez la procédure qui convient à vos besoins et implémentez-la en conséquence, comme illustré dans cet article à l'aide de nombreux scénarios. Cela nous amène à la fin de cet article; s'il vous plaît restez à l'écoute et abonnez-vous pour plus de solutions et des discussions intéressantes.


Prochain article