Python >> Tutoriel Python >  >> Python

Comment diviser une chaîne entre des chiffres et des lettres ?

Formulation du problème : Étant donné une chaîne de lettres et de chiffres. Comment diviser la chaîne en sous-chaînes de lettres ou de chiffres en utilisant la limite entre une lettre et un chiffre et vice versa.

Exemples  :Jetez un œil aux exemples suivants de ce que vous voulez accomplir.

'111A222B333C'     – ->    ['111', 'A', '222', 'B', '333', 'C']
'Finxter42'        – ->    ['Finxter', '42']
'Hello world'     – ->    ['Hello', ' world']

Méthode 1 :re.split()

Le re.split(pattern, string) la méthode correspond à toutes les occurrences du pattern dans le string et divise la chaîne le long des correspondances résultant en 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'] .

# Method 1: re.split()
import re
s = '111A222B333C'
res = re.split('(\d+)', s)
print(res)
# ['', '111', 'A', '222', 'B', '333', ' C']

Le \d caractère spécial correspond à n'importe quel chiffre entre 0 et 9. En utilisant le nombre maximal de chiffres comme délimiteur, vous divisez le long de la limite chiffre-mot. Notez que vous ne consommez pas le caractère divisé en l'enveloppant dans un groupe correspondant à l'aide des parenthèses (...) . Si vous omettez les parenthèses, cela consommera les nombres et le résultat ne contiendra aucun nombre consécutif.

Méthode 2 :re.findall()

Le re.findall(pattern, string) la méthode scanne string de gauche à droite , recherchant toutes les correspondances sans chevauchement du pattern . Il renvoie une liste de chaînes dans l'ordre correspondant lors de la numérisation de la chaîne de gauche à droite.

# Method 2: re.findall()
import re
s = '111A222B333C'

res = re.findall('(\d+|[A-Za-z]+)', s)

print(res)
# ['111', 'A', '222', 'B', '333', 'C']

Méthode 3 :itertools.groupby()

# Method 3: itertools.groupby()
from itertools import groupby
s = '111A222B333C'

res = [''.join(g) for _, g in groupby(s, str.isalpha)]
print(res)
# ['111', 'A', '222', 'B', '333', 'C']
  • Le itertools.groupby(iterable, key=None) la fonction crée un itérateur qui renvoie les tuples (key, group-iterator) regroupés par chaque valeur de key . Nous utilisons le str.isalpha() fonctionner comme une fonction clé.
  • Le str.isalpha() la fonction renvoie True si la chaîne se compose uniquement de caractères alphabétiques.

Vidéo associée re.split()

Humour de programmeur

Il n'y a que 10 types de personnes dans ce monde :ceux qui connaissent le binaire et ceux qui ne le connaissent pas.
👩🧔‍♂️
~~~

Il existe 10 types de personnes dans le monde. Ceux qui comprennent le trinaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

👩🧔‍♂️👱‍♀️