12
votes

Python re - diviser une chaîne avant un personnage

Comment diviser une chaîne à des positions avant un personnage?

  • diviser une chaîne avant 'a'
  • INPUT: "FFFAGGGGAHHHH"
  • Sortie: ["FFF", "AGGG", "AHHH"]

    La manière évidente ne fonctionne pas: xxx


8 commentaires

Que vous attendez-vous lorsque vous avez divisé "aaa" - ['', 'a', ',' a ',' a '] ou [' a ', 'A', 'A'] ?


"AAA" -> "A", "A", "A" ou "", "A" A "," A "," A "


Merci pour toutes les réponses du travail!


-1: "AAA" -> ["A", "A", "A"] ou ["", "A", "A", "A"]. C'est la chose la moins utile que j'ai jamais vue. Les deux ont raison? Dans ce cas, aucun modèle ne peut jamais fonctionner. Fermer cette question.


soit l'un d'eux le fera. Si vous avez déjà codé dans Python, vous sauriez un filtre simple (BOOL, L) filtrera l'élément vide.


@ user496852: "L'un ou l'autre d'entre eux fera". Faux. Le modèle est totalement différent. Nous ne pouvons pas interpréter votre question sans un fait absolu et absolu. Veuillez choisir un comme le sens "correct" de votre question ou de le fermer. Un seul modèle est "juste". L'autre peut être dérivé. Mais on est "approprié".


"AAA" -> ["", "A", "A", "A"] est la "bonne" exigence, si vous insistez. :)


Quelque chose changea-t-il dans Python? Maintenant, votre "manière évidente" fonctionne parfaitement.


7 Réponses :


4
votes
>>> r.findall("fffagggaahhh")
['fff', 'aggg', 'ahhh']

2 commentaires

Je me demande si l'OP voudrait garder la chaîne vide de la scission si elle a commencé avec un "A".


-1 Uncool. Échoue sur les réponses répétées ... E.G. "AAA" -> Liste vide



21
votes

OK, pas exactement la solution que vous voulez, mais je pensais que ce sera un ajout utile au problème ici.

solution sans re

sans re: xxx


2 commentaires

@knitti: merci. Je comprends que ce n'est pas la solution de REI et je voulais l'écrire d'abord avant d'écrire une solution. À ce moment-là, j'ai fini d'écrire cela, la solution à base de RE venue.


Ouais, pourquoi utiliser un marteau sur un seul clou si vous avez un tireur à ongles.



-3
votes

split () prend une dispute pour le caractère à scinder sur: xxx


0 commentaires

5
votes
>>> rx = re.compile("(?:a|^)[^a]*")
>>> rx.findall("fffagggahhh")
['fff', 'aggg', 'ahhh']
>>> rx.findall("aaa")
['a', 'a', 'a']
>>> rx.findall("fgh")
['fgh']
>>> rx.findall("")
['']

1 commentaires

-1 re.findall ("(?: ^ | a) [^ a] *", "aaa") produit ['', 'A']



-1
votes
>>> foo = "abbcaaaabbbbcaaab"
>>> bar = foo.split("c")
>>> baz = [bar[0]] + ["c"+x for x in bar[1:]]
>>> baz
['abb', 'caaaabbbb', 'caaab']
Due to how slicing works, this will work properly even if there are no occurrences of c in foo.

0 commentaires

3
votes
>>> print list(split_before("a","afffagggahhhaab"))
['', 'afff', 'aggg', 'ahhh', 'a', 'ab']
>>> print list(split_before("a","ffaabcaaa"))
['ff', 'a', 'abc', 'a', 'a', 'a']
>>> print list(split_before("a","aaaaa"))
['', 'a', 'a', 'a', 'a', 'a']
>>> print list(split_before("a","bbbb"))
['bbbb']
>>> print list(split_before("a",""))
['']

0 commentaires

1
votes

Celui-ci fonctionne sur l'approche répétée a 'S

"Les principaux morceaux que vous recherchez sont un A suivi par zéro ou plus non- a . Qui couvre toutes les possibilités, à l'exception de zéro ou de plus non - a . Cela ne peut arriver qu'au début de la chaîne d'entrée.


0 commentaires