我試圖使用RE來匹配更改的ID並提取它。我有一些麻煩讓它工作。該字符串是:使用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)
誰能幫助提取此字符串。
感謝
我試圖使用RE來匹配更改的ID並提取它。我有一些麻煩讓它工作。該字符串是:使用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)
誰能幫助提取此字符串。
感謝
>>> 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',)
你不一定必須使用正則表達式來抽取子。
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))
這裏被重新和基於字符串的版本:
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。