J'ai des SKU comme les suivants :

SBC225SLB32
SBA2161BRB30
PBA632AS32

Où les 3-4 premiers caractères sont A-Z, qui doivent être extraits, et les 3-4 chiffres suivants sont [0-9], et doivent également être extraits.

Pour le premier, j'ai essayé \D{3,4} et pour le second, j'ai essayé \d{3,4}.

Mais lors de l'utilisation de .str.extract('\D{3,4}') de pandas, j'ai eu une erreur pattern contains no capture groups. Y a-t-il une meilleure manière de faire cela?

1
JaP 7 oct. 2020 à 17:25

1 réponse

Meilleure réponse

Le modèle d'expression régulière que vous transmettez à Series.str.extract ne contient aucun groupe de capture, alors que la méthode en attend au moins un.

Dans votre cas, il est plus pratique de saisir les deux valeurs à la fois à l'aide de deux groupes de capture. Vous pouvez utiliser

df[['Code1', 'Code2']] = df['SKU'].str.extract(r'^([A-Z]{3,4})([0-9]{3,4})', expand=False)

Voir la démo regex. Détails du motif :

  • ^ - début de chaîne
  • ([A-Z]{3,4}) - Groupe de capture 1 : trois à quatre lettres ASCII majuscules
  • ([0-9]{3,4}) - Groupe de capture 2 : trois à quatre chiffres ASCII majuscules.
2
Wiktor Stribiżew 7 oct. 2020 à 14:32