Python >> Tutoriel Python >  >> Python

Comment diviser une chaîne et conserver les séparateurs ?

Résumé : Pour diviser une chaîne et conserver les délimiteurs/séparateurs, vous pouvez utiliser l'une des méthodes suivantes :

  • Utilisez un module regex et le split() méthode avec \W caractère spécial.
  • Utilisez un module regex et le split() méthode avec un jeu de caractères négatif [^a-zA-Z0-9] .
  • Utilisez un module regex et le split() méthode avec le métacaractère soit-ou | .
  • Utilisez une compréhension de liste et ajoutez le séparateur.
  • Diviser en utilisant un saut de ligne :splitlines()

Vous pouvez essayer la première méthode dans notre shell Python interactif :

Exercice :Ajoutez plus de mots avec des délimiteurs spéciaux au texte. Ça marche toujours ?


Plongeons dans le problème étape par étape !

Problème : Étant donné une chaîne en Python ; comment diviser la chaîne et conserver également les séparateurs/délimiteurs ?

Une séquence d'un ou plusieurs caractères utilisée pour séparer deux ou plusieurs parties d'une chaîne donnée ou d'un flux de données est appelée délimiteur ou séparateur.

Exemple : Considérez qu'il existe une chaîne donnée, comme indiqué dans l'exemple ci-dessous, et que vous devez la diviser de manière à ce que les séparateurs/délimiteurs soient également stockés avec les caractères de mot dans une liste. Veuillez suivre l'exemple ci-dessous pour obtenir un aperçu de notre énoncé de problème.

text = 'finxter,practise@Python*1%every day'
somemethod(text)

Résultat souhaité :

['finxter', ',', 'practice', '@', 'Python', '*', '1', '%', 'every', ' ', 'day']

Maintenant que nous avons une vue d'ensemble de notre problème, plongeons-nous dans les solutions sans plus tarder !

Utiliser des expressions régulières (RegEx)

Le moyen le plus efficace de diviser la chaîne et d'extraire les caractères avec les séparateurs est d'utiliser des expressions régulières avec le split() fonction.

  • split() est une méthode intégrée à Python qui est utilisée pour diviser une chaîne qui correspond à une expression régulière. Vous pouvez en savoir plus sur le split() fonction en suivant cet article.

Voyons les différentes expressions régulières qui peuvent être utilisées pour résoudre notre problème :

Méthode 1 :Utilisation de '(\W)'

L'une des façons dont nous pouvons diviser la chaîne donnée avec le délimiteur est d'importer le module regex puis de diviser la chaîne en utilisant le split() fonction avec le | méta-caractère.

import re

text = 'fnixter,practice@Python*1%every day'
print(re.split('(\W)', text))

Sortie

['finxter', ',', 'practice', '@', 'Python', '*', '1', '%', 'every', ' ', 'day']

Examinons et discutons l'expression utilisée ici :

  • () est utilisé pour conserver ou stocker les séparateurs/délimiteurs avec les caractères du mot.
  • \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.

Méthode 2 :Utilisation de [^] Set

Une autre façon de diviser la chaîne en utilisant regex est de la diviser en utilisant le split() fonction avec le ([^a-zA-Z0-9]) ensemble.

Examinons l'exemple suivant pour voir comment cela fonctionne :

import re

text = 'finxter,practice@Python*1%every day'
print(re.split('([^a-zA-Z0-9])', text))

Sortie

['finxter', ',', 'practice', '@', 'Python', '*', '1', '%', 'every', ' ', 'day']

Examinons l'expression utilisée ici :

  • () est utilisé pour conserver ou stocker des séparateurs avec les caractères du mot.
  • [] est utilisé pour faire correspondre un ensemble de caractères dans la chaîne.
  • [^a-zA-Z0-9] est utilisé pour renvoyer une correspondance pour n'importe quel caractère SAUF les alphabets (lettres majuscules et minuscules) et les chiffres, c'est-à-dire qu'il est utilisé pour trouver un délimiteur/séparateur. Dans ce cas, l'ensemble est utilisé pour trouver un délimiteur et diviser la chaîne en caractères de mot en conséquence.

Méthode 3 :Utilisation du métacaractère Soit Ou (|) pour spécifier les délimiteurs

Une autre approche pour résoudre notre problème consiste à diviser la chaîne en utilisant la fonction split () avec le métacaractère soit-ou | pour fournir/spécifier plusieurs délimiteurs dans la chaîne en fonction desquels nous voulons diviser la chaîne. Un métacaractère est utilisé pour transmettre une signification particulière à une expression régulière.

Dans notre cas, les délimiteurs que nous devons spécifier en utilisant le | caractère sont [,|@|%| |*]

Examinons le programme suivant pour voir comment fonctionne le méta-caractère ou bien :

import re

text = 'finxter,practice@Python*1%every day'
print(re.split('([,|@|%| |*])', text))

Sortie

['finxter', ',', 'practice', '@', 'Python', '*', '1', '%', 'every', ' ', 'day']

Essayons maintenant quelques méthodes qui n'utilisent pas d'expressions régulières .

#Remarque

Deux autres méthodes méritent une mention spéciale dans la liste de nos solutions. Bien qu'ils ne soient pas les solutions exactes à notre énoncé de problème. Cependant, ils peuvent s'avérer utiles dans différents scénarios en fonction de l'exigence.

Discutons de ces méthodes :

Avis de non-responsabilité :les éléments suivants ont un seul type de séparateur entre les mots.

Méthode 4 :Utiliser une compréhension de liste et ajouter le séparateur

Considérant que la chaîne a un seul séparateur, par exemple :

ip = '192.168.10.32'

Pour diviser cette chaîne, nous pouvons utiliser une compréhension de liste pour obtenir une solution en une ligne comme indiqué ci-dessous :

ip = '192.168.10.32'
print([u for x in ip.split('.') for u in (x, '.')])

Sortie

['192', '.', '168', '.', '10', '.', '32', '.']

Méthode 5 :Fractionner à l'aide d'un saut de ligne :splitlines()

Dans le cas où le séparateur nécessaire est un saut de ligne, nous pouvons utiliser le splitlines() fonction pour diviser la chaîne donnée en fonction des sauts de ligne. Le splitlines() La fonction intégrée est utilisée pour diviser la chaîne en cassant aux limites de la ligne.

Examinons l'exemple suivant pour voir comment le splitlines() la fonction fonctionne :

text = """1. This is the first line.
2. This is the second line.
3. This is the third line."""
# If the first argument is set to True, the result includes a newline character at the end of the line.
print(text.splitlines(True))

Sortie

['1. This is the first line.\n', '2. This is the second line.\n', '3. This is the third line.']

Conclusion

Par conséquent, dans cet article, nous avons discuté de différentes méthodes pour diviser une chaîne et stocker les caractères de mot avec les séparateurs/délimiteurs. Je vous recommande fortement de lire notre tutoriel de blog si vous souhaitez maîtriser le concept des expressions régulières Python.

J'espère que vous avez apprécié cet article et qu'il vous aidera dans votre parcours de codage Python. Veuillez vous abonner et rester à l'écoute pour d'autres articles intéressants !