J'ai une chaîne dans le format suivant:Séparation de chaînes dans le format requis, façon Pythonic? (Avec ou w/o Regex)
t='@abc @def Hello this part is text'
Je veux obtenir ceci:
l=["abc", "def"]
s='Hello this part is text'
Je l'ai fait:
a=t[t.find(' ',t.rfind('@')):].strip()
s=t[:t.find(' ',t.rfind('@'))].strip()
b=a.split('@')
l=[i.strip() for i in b][1:]
Il fonctionne pour la plupart, mais il échoue lorsque la partie de texte a le '@'. Par exemple, lorsque:
t='@abc @def My email is [email protected]'
échoue. Les @names sont là au début et il peut y avoir du texte après @names, qui peut éventuellement contenir @.
Il est clair que je peux ajouter initialement un espace et trouver le premier mot sans '@'. Mais cela ne semble pas une solution élégante.
Qu'est-ce qu'une façon pythonique de résoudre ce problème?
merci de l'étendre :-) Il ne m'était pas clair au début que cela peut être n'importe quel nombre de mots. Mais j'ai aussi eu des problèmes pour trouver la bonne syntaxe pour l'expression rationnelle lorsque j'essayais de nouveau. Donc, je vois que le groupe anonyme est maintenant à l'intérieur, je l'ai eu à l'extérieur. – MrTopf
auriez-vous la peine d'expliquer la regex? pourquoi trouve-t-il un nombre variable de "tags" ou quoi que ce soit @thing est appelé? – hasen
Bien joué Sir. Merci pour l'explication approfondie. – bernie