2014-07-02 2 views
1

Il existe une chaîne dont le contenu est au format "x: ... y: ... z: .. . ", '...' représente n'importe quel caractère exclut ':', et peut contenir un nombre quelconque d'espaces, j'essaie de scinder cette chaîne en ['x: ...', 'y : ... ',' z: ... '], comment puis-je faire cela en python?expression régulière pour reconnaître 'x: ... y: ... z: ...' dans python

exemple chaîne:

'name: myname\n\naddress: myaddress1\nmyaddress2\n\nmyadress3\ncontact:mycontact\n' 

ce que je veux est:

['name: myname\n\n', 'address: myaddress1,\nmyadress2,\n\nmyadress3\n', 'contact:mycontact\n'] 
+1

D'où vient le 'myadress3'? – falsetru

+0

désolé, je l'ai corrigé. – vts

Répondre

6

re.compile('\w+:[^:]*?(?=\w+:|$)')

Signification

  1. apparier un ou plusieurs caractère de mot à deux points
  2. tout correspond pas à un colon paresseusement
  3. Trouver un ou plusieurs caractères mot et deux points ou la fin de la ligne

Demo

2

Capture tout caractère sauf : ne serait pas utile que il inclurait les nouvelles lignes et address. Il semble que votre exigence réelle soit: Faites correspondre tout le texte jusqu'au début de la ligne suivante qui contient un deux-points. Voici une approche:

re.split("\n+(?=.*:)", s.strip()) 

Le motif signifie "un groupe de retours à la ligne suivi de tout texte contenant un deux-points". L'entrée est supprimée afin que le retour à la ligne final à la fin ne soit pas inclus dans le résultat final.

+0

J'ai enlevé mon commentaire, j'ai passé quelques minutes à essayer d'ajouter myaddress3 moi-même, réalisé après qu'il n'existe pas! –