2010-06-10 4 views
0

Я пытаюсь использовать RE, чтобы соответствовать изменяющемуся идентификатору и извлекать его. У меня есть кое-какие проблемы, чтобы заставить его работать. Строка:Использование RE для получения ID

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

код, который я пытался до сих пор:

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

Может кто-нибудь поможет экстракт эту строку.

Благодаря

ответ

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

Вы не обязательно должны использовать регулярное выражение для извлечения подстроки.

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

Здесь RE основе и струнные версии на базе:

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) 

(запустить в качестве основного сценария, чтобы подтвердить, что они возвращают один и тот же результат - строку, а не кортеж как существующий ответ своеобразно шоу), а вот время каждого (на моем медленном ноутбуке):

$ 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 

Хотя RE часто имеет плохую репутацию в сообществе Python, даже этот простой пример показывает, что, в случае необходимости, они могут быть фа чем простые манипуляции с строкой - в этом случае версия RE занимает всего около 3/4 времени, которое берет строка.

Смежные вопросы