2010-06-10 6 views
0

J'essaie d'utiliser RE pour faire correspondre un ID de modification et l'extraire. Je m'embête à le faire fonctionner. La chaîne est:Utilisation de RE pour récupérer un ID

m = 'Some Text That exists version 1.0.41.476 Fri Jun 4 16:50:56 EDT 2010' 

Le code que je l'ai essayé jusqu'à présent est:

r = re.compile(r'(s*\s*)(\S+)') 
m = m.match(r) 

Can extrait d'aide à personne cette chaîne.

Merci

Répondre

4
>>> m = 'Some Text That exists version 1.0.41.476 Fri Jun 4 16:50:56 EDT 2010' 
>>> import re 
>>> re.search(r'version (\S+)', m).group(1) 
('1.0.41.476',) 
0

Vous ne devez pas nécessairement utiliser une expression régulière pour extraire une sous-chaîne.

def get_version_number(text): 
    """Assumes that the word 'version' appears before the version number in the 
    text.""" 
    words = text.split() 
    index = words.index('version') + 1 
    return words[index] 

if __name__ == '__main__': 
    m = 'Some Text That exists version 1.0.41.476 Fri Jun 4 16:50:56 EDT 2010' 

    print get_version_number(m) 
    print repr(get_version_number(m)) 
2

Ici sont RE-basés et les versions basés sur des chaînes:

import re 

def bystr(text): 
    words = text.split() 
    index = words.index('version') + 1 
    return words[index] 

def byre(text, there=re.compile(r'version\s+(\S+)')): 
    return there.search(text).group(1) 

m = 'Some Text That exists version 1.0.41.476 Fri Jun 4 16:50:56 EDT 2010' 

if __name__ == '__main__': 
    print bystr(m) 
    print byre(m) 

(exécuté comme script principal pour confirmer leur retour le même résultat - une chaîne, pas un tuple comme une réponse particulièrement existante spectacles), et voici le moment de chaque (sur mon ordinateur portable lent):

$ python -mtimeit -s'import are' 'are.bystr(are.m)' 
100000 loops, best of 3: 4.29 usec per loop 
$ python -mtimeit -s'import are' 'are.byre(are.m)' 
100000 loops, best of 3: 3.25 usec per loop 

Bien que RE ont souvent une mauvaise réputation dans la communauté Python, même cet exemple simple montre que, le cas échéant, ils peuvent souvent être fa plus qu'une simple manipulation de chaîne - dans ce cas, la version RE ne prend que 3/4 du temps que prend la version de chaîne.

Questions connexes