Python >> Tutoriel Python >  >> Python Tag >> RegEx

Comment puis-je diviser des colonnes avec regex pour déplacer les majuscules de fin dans une colonne séparée ?

Vous pouvez extraire les données en deux colonnes en utilisant une expression régulière comme ^(.*?)([A-Z]+)$ ou ^(.*[^A-Z])([A-Z]+)$ :

df[['Name','Team']] = df['Name'].str.extract('^(.*?)([A-Z]+)$', expand=True)

Cela gardera tout jusqu'au dernier caractère qui n'est pas une lettre majuscule dans le groupe "Nom" et les dernières lettres majuscules dans le groupe "Équipe".

Voir la démo regex #1 et la démo regex #2

Détails

  • ^ - début d'une chaîne
  • (.*?) - Groupe de capture 1 :zéro ou plusieurs caractères autres que les caractères de saut de ligne, aussi peu que possible
    ou
  • (.*[^A-Z]) - tout zéro ou plusieurs caractères autres que les caractères de saut de ligne, autant que possible, jusqu'au dernier caractère qui n'est pas une lettre majuscule ASCII (à condition que les motifs suivants correspondent) (notez que ce motif implique qu'il y a au moins 1 caractère avant le dernières majuscules)
  • ([A-Z]+) - Groupe de capture 2 :une ou plusieurs lettres majuscules ASCII
  • $ - fin de chaîne.