2011-11-02 3 views
1

je string: './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]'Python mots régulièrement coupé

J'ai besoin chaîne: '27-10-2011 17:07:02'

Comment puis-je faire cela en python?

+0

double possible de [mots entre délimiteurs Extraction \ [\] en python] (http://stackoverflow.com/questions/2852484/extracting-w ords-between-delimiters-in-python) –

Répondre

2

Il y a plusieurs façons de le faire, d'une façon est d'utiliser str.partition:

text='./money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]' 
before,_,after = text.partition('[') 
print(after[:-1]) 
# 27-10-2011 17:07:02 

Une autre est d'utiliser str.split:

before,after = text.split('[',1) 
print(after[:-1]) 
# 27-10-2011 17:07:02 

ou str.find et str.rfind:

ind1 = text.find('[')+1 
ind2 = text.rfind(']') 
print(text[ind1:ind2]) 

Toutes ces méthodes reposent sur la sous-chaîne désirée immédiate en suivant la première parenthèse gauche [.

Les deux premières méthodes reposent également sur la sous-chaîne désirée se terminant à l'avant-dernier caractère de text. La dernière méthode (en utilisant rfind) recherche à partir de la droite l'index de la parenthèse de droite, elle est donc un peu plus générale et ne dépend pas d'autant de constantes (potentielles par défaut).

0

Vous pouvez également utiliser l'expression régulière:

import re 

s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]' 
print re.search(r'\[(.*?)\]', s).group(1) 
+0

Pourquoi avez-vous besoin du point d'interrogation ici? – kame

+0

@kame Comme il se trouve que vous ne le faites pas. Je suis juste habitué à l'utiliser quand il s'agit de '. *' Suivi par quelque chose. – rplnt

1

Si votre chaîne a toujours la même structure ce qui est probablement la solution la plus simple:

s = r'./money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]' 
s[s.find("[")+1:s.find("]")] 

Mise à jour:

Après avoir vu certains des les autres réponses c'est une légère amélioration:

s[s.find("[")+1:-1] 

Exploiter le fait que le crochet fermant est le dernier caractère de votre chaîne.

0

Essayez avec un regex:

import re 
re.findall(".*\[(.*)\]", './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]') 

>>> ['27-10-2011 17:07:02'] 
0

Probablement la meilleure façon (si vous connaissez la chaîne sera toujours dans ce format

>>> s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]' 
>>> s[s.index('[') + 1:-1] 
'27-10-2011 17:07:02' 
1

Si le format est « fixe », vous pouvez également utiliser ce

>>> s = './money.log_rotated.27.10.2011_17:15:01:[27-10-2011 17:07:02]' 
>>> s[-20:-1:] 
'27-10-2011 17:07:02' 
>>>