2009-11-11 5 views
1

J'ai la chaîne qui ressemble à ceci:comment découper une chaîne correspondant à un modèle en python

'Toy Story..(II) (1995)' 

Je veux diviser la ligne en deux parties comme celle-ci:

['Toy Story..(II)','1995'] 

Comment puis-je faire il? Merci.

+1

est que la seule chaîne que vous voulez partager? Si non, pourriez-vous donner quelques autres exemples? –

+0

La raison pour laquelle je demande est que si c'est la seule chaîne que vous voulez diviser, je voudrais juste le stocker dans sa forme finale: l = ['Toy Story .. (II)' '1995'] –

+1

Il sera difficile de faire automatiquement la conversion de "Stroy" à "Story" pour des fautes d'orthographe similaires, mais en dehors de cela, une simple analyse de chaîne ou une simple regex aidera. – ndim

Répondre

4

Ce code vous permettra de démarrer:

'Toy Stroy..(II) (1995)'.rstrip(')').rsplit('(',1) 

Autre que cela, vous pouvez utiliser r'\s*[(]\d{4}[)]\s*$' pour correspondre à un nombre à quatre chiffres entre parenthèses à la fin de la chaîne. Si vous le trouvez, vous pouvez hachez-le:

s = '' 
l = [s] 
match = re.compile(r'\s*[(]\d+[)]\s*$').search(s) 
if match is not None: 
    l = [s[:len(match.group(0))], s[-len(match.group(0)):].trim] 
+0

Pour votre deuxième méthode, je pense que ce n'est pas adapté à mon problème. Vous voyez, si la piqûre est "Toy Stoy (1000) (1995)". la méthode ne fonctionnera pas bien. le pensez-vous? –

+0

Essayez-le, cela fonctionne puisque l'expression rationnelle correspond à un seul nombre à quatre chiffres à la fin de la chaîne. –

0

Vous pouvez utiliser des expressions régulières pour cela. Voir ici: http://www.amk.ca/python/howto/regex/

Vous pouvez également utiliser la fonction de division, puis supprimer la parenthèse ou d'autres caractères non désirés. Voir ici: http://www.python.org/doc/2.3/lib/module-string.html

+0

La ligne peut être complexe, et il sera difficile de concevoir un régulier pour bien fonctionner. –

+0

Si la ligne se termine toujours par l'année, une simple regex avec quelque chose comme (. *) \ S * \ ((\ d {4}) \) devrait faire l'affaire. Vous aurez le nom du film dans la première référence et l'année dans la seconde. – Kaivosukeltaja

0
l[:-1].split("(") 
+0

Merci, je suis désolé de donner un exemple simple. Mais en vrai mot, la ligne serait comme ceci "Toy Stoy .. (II) (1995)". Dans ce cas, votre méthode ne fonctionnera pas bien. –

1

Une façon est la suivante:

s = 'Toy Stroy..(II) (1995)' 
print s[:s.rfind('(')].strip() 
print s[s.rfind('('):].strip("()") 

Sortie:

Toy Stroy..(II) 
1995 
>>> 
+0

bon travail, merci beaucoup –

Questions connexes