Python: scinde une chaîne de la liste de séparateurs
En Python, je voudrais diviser une chaîne à l'aide d'une liste de séparateurs. Les séparateurs peuvent être soit des virgules ou des points-virgules. Les espaces doivent être supprimés, à moins qu'il est au milieu de non-blanc, non-séparateur de caractères, auquel cas il doit être préservée.
Cas de Test 1: ABC,DEF123,GHI_JKL,MN OP
Cas de Test 2: ABC;DEF123;GHI_JKL;MN OP
Cas de Test 3: ABC ; DEF123,GHI_JKL ; MN OP
Sonne comme un cas pour les expressions régulières, ce qui est bien, mais si c'est plus facile et plus propre de le faire d'une autre manière qui serait encore mieux.
Merci!
OriginalL'auteur blah238 | 2011-01-14
Vous devez vous connecter pour publier un commentaire.
Ce devrait être beaucoup plus rapide, puis la regex et vous pouvez passer d'une liste de séparateurs comme vous le souhaitiez:
Comment l'utiliser:
Test de Performance:
Sur ma machine, la deuxième solution que j'ai donné est encore plus rapide pour les chaînes courtes.
Au lieu d'avoir default_sep être un paramètre, il suffit d'utiliser l'un des seps. par exemple:
default_sep = seps[0]
et puis changer lefor
lignefor sep in seps[1:]:
.Cela dépend de l'appelant en sachant à l'avance qu'il y a un personnage (par exemple,"|") qui n'apparaissent jamais dans l'entrée. C'est distaster-ventre.
Cette comparaison est erronée: il compile les regex chaque passage dans la boucle. Si vous avez correctement compiler l'expression régulière à l'extérieur de la boucle (
r = re.compile(",|;")
), la regex version est plus rapide. Il est également clair, d'ordinaire, la solution flexible à ce que chacun comprend immédiatement, ce qui est encore plus fort argument que les performances.OriginalL'auteur Joschua
L'aide d'expressions régulières, essayez
ou
sans.
split()
pour éviter l'importation dere
, par exemple'ABC,DEF123,GHI_JKL,MN OP'.split(',|;')
Ne serait-ce pas fractionner la chaîne à tous les verbatim les occurrences de
",|;"
?Fonctionne très bien!! Merci 🙂
Désolé, vous avez raison. Je suis bête. 🙂
Mais si vous voulez diviser ,;. vous devez ajouter une boucle pour chaque personnage!
OriginalL'auteur Sven Marnach
OriginalL'auteur Raph Levien
La prise de la réponse ci-dessus, avec vos cas de test, vous souhaitez utiliser une expression régulière, et un ou plusieurs séparation des caractères. Dans votre cas, la séparation personnages semblent être ',', '|', ';' et espace. Les espaces en python est '\w', de sorte que la compréhension est:
Je ne peux pas répondre à sven de la réponse ci-dessus, mais je répartis sur un ou plusieurs des caractères à l'intérieur des crochets, et ne pas avoir à utiliser la bande de() la méthode.
Aïe, je n'ai pas lu correctement à la question... Sven réponse avec la bande des œuvres; la mienne suppose que l'espace est une autre séparation.
OriginalL'auteur tmarthal