Python >> Tutoriel Python >  >> Python

Comment obtenir une sous-chaîne d'une chaîne en Python

Apprenez à obtenir une sous-chaîne d'une chaîne en Python.

Apprendre quelque chose de nouveau peut être un défi. Plus vous travaillez avec Python, plus vous remarquez la fréquence à laquelle les chaînes apparaissent. La manipulation de chaînes en Python est une compétence importante. Dans cet article, nous vous présentons une introduction à la génération d'une sous-chaîne d'une chaîne en Python.

Python est un excellent langage à apprendre, surtout si vous êtes débutant, comme nous en discutons dans cet article. Nous avons même un cours sur le travail avec des chaînes en Python. Il contient des exercices interactifs conçus pour commencer au niveau de base et vous apprendre tout ce que vous devez savoir sur ce type de données important. Une fois que vous êtes à l'aise avec les chaînes, vous pouvez travailler sur des problèmes de science des données intéressants. Jetez un œil au cours Python pour la science des données, qui vous donne une introduction à ce sujet diversifié.

Découpage et fractionnement de chaînes

La première façon d'obtenir une sous-chaîne d'une chaîne en Python consiste à découper et diviser. Commençons par définir une chaîne, puis passons à quelques exemples :

>>> string = 'This is a sentence. Here is 1 number.'

Vous pouvez diviser cette chaîne en sous-chaînes, chacune ayant le str Type de données. Même si votre chaîne est un nombre, elle est toujours de ce type de données. Vous pouvez tester cela avec le type() intégré fonction. Les nombres peuvent également être d'autres types, y compris le decimal type de données, dont nous discutons ici.

Tout comme les tableaux et les listes en Python, les chaînes peuvent être découpées en spécifiant les index de début et de fin, entre crochets et séparés par deux-points. Cela renvoie une sous-chaîne de la chaîne d'origine.

N'oubliez pas que l'indexation en Python commence à partir de 0. Pour obtenir les 7 premiers caractères de la chaîne, procédez simplement comme suit :

	>>> print(string[:7])
	This is

Remarquez ici que nous n'avons pas spécifié explicitement l'index de départ. Par conséquent, il prend une valeur par défaut de 0.

Au fait, si vous voulez plus d'informations sur le print() fonction, consultez cet article. Il y a probablement plus que vous ne le pensez.

Nous pouvons également indexer par rapport à la fin de la chaîne en spécifiant une valeur de début négative :

	>>> print(string[-7:])
	number.

Comme nous n'avons pas spécifié de valeur de fin, il prend la valeur par défaut de len(string) . Si vous connaissez les index de début et de fin d'un mot particulier, vous pouvez l'extraire de la chaîne comme ceci :

>>> print(string[10:18])
sentence

Cependant, ce n'est pas optimal pour extraire des mots individuels d'une chaîne car cela nécessite de connaître les index à l'avance.

Une autre option pour obtenir une sous-chaîne de la chaîne est de la diviser en mots, ce qui peut être fait avec le string.split() méthode. Cela prend deux arguments facultatifs :une chaîne définissant les caractères à diviser (par défaut, n'importe quel espace blanc) et le nombre maximal de divisions (par défaut, -1, ce qui signifie qu'il n'y a pas de limite). Par exemple, si nous voulons diviser à un espace, vous pouvez faire ce qui suit, qui renvoie une liste de chaînes :

>>> string.split(' ')
['This', 'is', 'a', 'sentence.', 'Here', 'is', '1', 'number.']

Mais notez que le point (caractère point) est inclus à la fin des mots "phrase" et "nombre". Nous y reviendrons plus tard dans l'article lorsque nous examinerons les expressions régulières.

Il existe de nombreuses méthodes de chaîne intégrées dans Python. Ils vous permettent de modifier une chaîne, de tester ses propriétés ou d'y effectuer une recherche. Une méthode utile pour générer une sous-chaîne plus complexe d'une chaîne en Python est le string.join() méthode. Il prend un itérable de chaînes et les joint. Voici un exemple :

>>> print(' and '.join(['one', 'two', 'three']))
one and two and three

Avec une astuce d'indexation astucieuse, cela peut être utilisé pour imprimer une sous-chaîne contenant un mot sur deux à partir de l'original :

>>> print(' '.join(string.split(' ')[::2]))
This a Here 1

Depuis l'entrée dans le join() prend une liste, vous pouvez faire une compréhension de liste pour créer une sous-chaîne à partir de tous les mots d'une longueur égale à 4, par exemple. Pour ceux d'entre vous qui recherchent un exercice plus difficile, essayez-le par vous-même. Nous vous montrerons également une méthode différente pour le faire plus tard dans l'article. Si vous voulez savoir comment écrire des chaînes dans un fichier en Python, consultez cet article.

Le module d'analyse

Il existe un module Python peu connu appelé parse avec une grande fonctionnalité pour générer une sous-chaîne en Python. Ce module n'est pas fourni en standard avec Python et doit être installé séparément. La meilleure façon est d'exécuter le pip install commande depuis votre terminal.

Voici comment obtenir une sous-chaîne à l'aide de la fonction d'analyse, qui accepte deux arguments :

>>> import parse
>>> substring = parse.parse('This is {}. Here is 1 {}.', 'This is a sentence. Here is 1 number.')
>>> substring.fixed
('a sentence', 'number')

Appeler le fixed méthode sur substring renvoie un tuple avec les sous-chaînes extraites du deuxième argument à la position des accolades {} dans le premier argument. Pour ceux d'entre vous qui connaissent le formatage des chaînes, cela peut sembler étrangement familier. En effet, le module parse est l'opposé de format() . Découvrez ceci, qui fait le contraire de l'extrait de code ci-dessus :

>>> print('This is {}. Here is 1 {}.'.format('a sentence', 'number'))
This is a sentence. Here is 1 number.

Pendant que nous parlons du module d'analyse, il vaut la peine de discuter de la fonction de recherche, car la recherche est un cas d'utilisation courant lorsque vous travaillez avec des chaînes. Le premier argument de recherche définit ce que vous recherchez en spécifiant le terme de recherche avec des accolades. La seconde définit où chercher.

Voici un exemple :

>>> result = parse.search('is a {}.', 'This is a sentence. Here is 1 number')
>>> result.fixed
('sentence',)

Encore une fois, en appelant le fixed La méthode renvoie un tuple avec les résultats. Si vous voulez les index de début et de fin du résultat, appelez la méthode spans. Utiliser le module d'analyse pour rechercher dans une chaîne est agréable - il est assez robuste pour définir ce que vous recherchez (c'est-à-dire le premier argument).

Expressions régulières

Le dernier module Python dont nous voulons parler est re, qui est l'abréviation de "regex", qui est lui-même l'abréviation de "regular expression". Les expressions régulières peuvent être un peu intimidantes :elles impliquent la définition de modèles hautement spécialisés et parfois compliqués à rechercher dans les chaînes.

Vous pouvez utiliser regex pour extraire des sous-chaînes en Python. Le sujet est trop profond pour être couvert ici de manière exhaustive, nous allons donc simplement mentionner quelques fonctions utiles et vous donner une idée de la façon de définir les modèles de recherche. Pour plus d'informations sur ce module et ses fonctionnalités, consultez la documentation.

Le findall() la fonction prend deux arguments obligatoires :motif et chaîne . Commençons par extraire tous les mots de la chaîne que nous avons utilisée ci-dessus :

>>> re.findall(r'[a-z]+', 'This is a sentence. Here is 1 number.', flags=re.IGNORECASE)
['This', 'is', 'a', 'sentence', 'Here', 'is', 'number']

Le [a-z] modèle correspond à toutes les lettres minuscules, le + indique que les mots peuvent être de n'importe quelle longueur, et le drapeau vous dit d'ignorer la casse. Comparez cela au résultat que nous avons obtenu ci-dessus en utilisant string.split() , et vous remarquez que le point n'est pas inclus.

Maintenant, extrayons tous les nombres de la chaîne :

>>> re.findall(r'\b\d+\b', 'This is a sentence. Here is 1 number.')
['1']

\b correspond à une limite au début et à la fin du motif, \d correspond à n'importe quel chiffre de 0 à 9, et encore le + indique que les nombres peuvent être de n'importe quelle longueur. Par exemple, on retrouve tous les mots d'une longueur de 4 caractères avec :

>>> re.findall(r'\b\w{4}\b', 'This is a sentence. Here is 1 number.')
['This', 'Here']

\w correspond à n'importe quel mot et {4} définit la longueur des mots à rechercher. Pour générer une sous-chaîne, il vous suffit d'utiliser string.join() comme nous l'avons fait plus haut. Il s'agit d'une approche alternative à la compréhension de liste mentionnée précédemment, qui peut également être utilisée pour générer une sous-chaîne avec tous les mots de longueur 4.

Il existe d'autres fonctions dans ce module qui valent la peine d'être examinées. match() peut être utilisé pour déterminer si le modèle correspond au début de la chaîne, et search() parcourt la chaîne pour rechercher tout emplacement où le modèle se produit.

Réflexions finales sur la génération de sous-chaînes en Python

Dans cet article, nous avons discuté de l'extraction et de l'impression de sous-chaînes de chaînes en Python. Utilisez-le comme base pour explorer d'autres sujets tels que le grattage des données d'un site Web. Pouvez-vous définir un modèle regex pour extraire une adresse e-mail d'une chaîne ? Ou supprimer la ponctuation de ce paragraphe ? Si vous le pouvez, vous êtes sur la bonne voie pour devenir un data wrangler !

Si vous travaillez également beaucoup avec des données tabulaires, nous avons un article qui vous montre comment joliment imprimer des tableaux en Python. En ajoutant lentement toutes ces compétences à votre boîte à outils, vous deviendrez un programmeur expert.