Skip to content

Séparation de chaînes de caractères en Python (délimiteur, saut de ligne, regex, etc.)

Cet article décrit comment diviser des chaînes par des délimiteurs, des sauts de ligne, des expressions régulières et le nombre de caractères en Python.

  • Fractionner par délimiteur :split()
    • Spécifiez le délimiteur :sep
    • Spécifiez le nombre maximal de fractionnements :maxsplit
  • Séparer de droite par un délimiteur :rsplit()
  • Fractionner par saut de ligne :splitlines()
  • Fractionner par regex :re.split()
    • Fractionné par plusieurs délimiteurs différents


  • Concaténer une liste de chaînes
  • Fractionner en fonction du nombre de caractères : slice

Consultez l’article suivant pour plus d’informations sur la façon de concaténer et d’extraire des chaînes.

Fractionner par délimiteur :split()

Utilisez la méthode split () pour diviser par délimiteur.

Si l’argument est omis, il sera divisé par des espaces, tels que des espaces, des retours à la ligne n et des tabulations t. Les espaces blancs consécutifs sont traités ensemble.

Une liste de mots est renvoyée.

s_blank = 'one two     threenfourtfive'
print(s_blank)
# one two     three
# four  five

print(s_blank.split())
# ['one', 'two', 'three', 'four', 'five']

print(type(s_blank.split()))
# <class 'list'>

Utilisez join(), décrit ci-dessous, pour concaténer une liste dans une chaîne.

Spécifiez le délimiteur :sep

Spécifiez un délimiteur pour le premier paramètre sep.

s_comma = 'one,two,three,four,five'

print(s_comma.split(','))
# ['one', 'two', 'three', 'four', 'five']

print(s_comma.split('three'))
# ['one,two,', ',four,five']

Si vous souhaitez spécifier plusieurs délimiteurs, utilisez des expressions régulières comme décrit plus loin.

Spécifiez le nombre maximal de fractionnements :maxsplit

Spécifiez le nombre maximal de divisions pour le deuxième paramètre maxsplit.

Si maxsplit est donné, au plus, les divisions maxsplit sont effectuées.

print(s_comma.split(',', 2))
# ['one', 'two', 'three,four,five']

Par exemple, il est utile de supprimer la première ligne d’une chaîne.

Si sep=’n’, maxsplit=1, vous pouvez obtenir une liste de chaînes séparées par le premier caractère de retour à la ligne n. Le second élément [1] de cette liste est une chaîne excluant la première ligne. Comme il s’agit du dernier élément, il peut être spécifié comme [-1].

s_lines = 'onentwonthreenfour'
print(s_lines)
# one
# two
# three
# four

print(s_lines.split('n', 1))
# ['one', 'twonthreenfour']

print(s_lines.split('n', 1)[0])
# one

print(s_lines.split('n', 1)[1])
# two
# three
# four

print(s_lines.split('n', 1)[-1])
# two
# three
# four

De même, pour supprimer les deux premières lignes :

print(s_lines.split('n', 2)[-1])
# three
# four

Séparer de droite par un délimiteur :rsplit()

rsplit() se sépare à partir de la droite de la chaîne.

Le résultat est différent de split() uniquement lorsque le deuxième paramètre maxsplit est donné.

De la même manière que split(), si vous souhaitez supprimer la dernière ligne, utilisez rsplit().

print(s_lines.rsplit('n', 1))
# ['onentwonthree', 'four']

print(s_lines.rsplit('n', 1)[0])
# one
# two
# three

print(s_lines.rsplit('n', 1)[1])
# four

Pour supprimer les deux dernières lignes :

print(s_lines.rsplit('n', 2)[0])
# one
# two

Fractionner par saut de ligne :splitlines()

Il existe également un splitlines () pour diviser par des limites de ligne.

Comme dans les exemples précédents, split() et rsplit() se séparent par défaut avec des espaces incluant un saut de ligne, et vous pouvez également spécifier un saut de ligne avec le paramètre sep.

Cependant, il est souvent préférable d’utiliser splitlines().

Par exemple, divisez la chaîne qui contient n (LF, utilisé dans le système d’exploitation Unix, y compris Mac) et rn (CR + LF, utilisé dans le système d’exploitation Windows).

s_lines_multi = '1 onen2 tworn3 threen'
print(s_lines_multi)
# 1 one
# 2 two
# 3 three

Lorsque split() est appliqué, par défaut, il est divisé non seulement par des sauts de ligne mais aussi par des espaces.

print(s_lines_multi.split())
# ['1', 'one', '2', 'two', '3', 'three']

Étant donné qu’un seul caractère de saut de ligne peut être spécifié dans sep, il ne peut pas être divisé s’il y a des caractères de saut de ligne mixtes. Il est également divisé à la fin du caractère de nouvelle ligne.

print(s_lines_multi.split('n'))
# ['1 one', '2 twor', '3 three', '']

splitlines() se divise à divers caractères de saut de ligne mais pas à d’autres espaces.

print(s_lines_multi.splitlines())
# ['1 one', '2 two', '3 three']

Si le premier argument, keepends, est défini sur True, le résultat inclut un caractère de saut de ligne à la fin de la ligne.

print(s_lines_multi.splitlines(True))
# ['1 onen', '2 tworn', '3 threen']

Consultez l’article suivant pour d’autres opérations avec des sauts de ligne.

Fractionner par regex :re.split()

split() et rsplit() se séparent uniquement lorsque sep correspond complètement.

Si vous souhaitez diviser une chaîne qui correspond à une expression régulière (regex) au lieu d’une correspondance parfaite, utilisez le split () du module re.

Dans re.split(), spécifiez le modèle regex dans le premier paramètre et la chaîne de caractères cible dans le second paramètre.

Un exemple de fractionnement par nombres consécutifs est le suivant.

import re

s_nums = 'one1two22three333four'

print(re.split('d+', s_nums))
# ['one', 'two', 'three', 'four']

Le nombre maximum de divisions peut être spécifié dans le troisième paramètre, maxsplit.

print(re.split('d+', s_nums, 2))
# ['one', 'two', 'three333four']

Fractionné par plusieurs délimiteurs différents

Les deux suivants sont utiles à retenir même si vous n’êtes pas familier avec la regex.

Entourez une chaîne de [] pour qu’elle corresponde à n’importe quel caractère unique qu’elle contient. Vous pouvez diviser la chaîne en plusieurs caractères différents.

s_marks = 'one-two+three#four'

print(re.split('[-+#]', s_marks))
# ['one', 'two', 'three', 'four']

Si les motifs sont délimités par |, cela correspond à n’importe quel motif. Bien sûr, il est possible d’utiliser des caractères spéciaux de regex pour chaque modèle, mais c’est OK même si la chaîne normale est spécifiée telle quelle. Vous pouvez diviser par plusieurs chaînes différentes.

s_strs = 'oneXXXtwoYYYthreeZZZfour'

print(re.split('XXX|YYY|ZZZ', s_strs))
# ['one', 'two', 'three', 'four']

Concaténer une liste de chaînes

Dans les exemples précédents, vous pouvez diviser la chaîne et obtenir la liste.

Si vous souhaitez concaténer une liste de chaînes en une seule chaîne, utilisez la méthode de chaîne, join().

Appelez join() à partir de ‘separator’ et passez une liste de chaînes à concaténer à l’argument.

l = ['one', 'two', 'three']

print(','.join(l))
# one,two,three

print('n'.join(l))
# one
# two
# three

print(''.join(l))
# onetwothree

Consultez l’article suivant pour plus de détails sur la concaténation de chaînes.

Fractionner en fonction du nombre de caractères : slice

Utilisez slice pour diviser les chaînes en fonction du nombre de caractères.

s = 'abcdefghij'

print(s[:5])
# abcde

print(s[5:])
# fghij

Il peut être obtenu sous forme de tuple ou assigné à une variable respectivement.

s_tuple = s[:5], s[5:]

print(s_tuple)
# ('abcde', 'fghij')

print(type(s_tuple))
# <class 'tuple'>

s_first, s_last = s[:5], s[5:]

print(s_first)
# abcde

print(s_last)
# fghij

Séparé en trois :

s_first, s_second, s_last = s[:3], s[3:6], s[6:]

print(s_first)
# abc

print(s_second)
# def

print(s_last)
# ghij

Le nombre de caractères peut être obtenu avec la fonction intégrée len(). Il peut également être divisé en deux à l’aide de cela.

half = len(s) // 2
print(half)
# 5

s_first, s_last = s[:half], s[half:]

print(s_first)
# abcde

print(s_last)
# fghij

Si vous souhaitez concaténer des chaînes, utilisez l’opérateur +.

print(s_first + s_last)
# abcdefghij