python找到带有'_v'的数字

时间:2014-04-22 00:28:50

标签: python

有没有更好的方法在字符串中查找数字,以'_v'开头,代表版本号?我想要的只是'001'

filename = 'greatv02_v001_jam.mb'

parts = re.split('_v|\_',filename)
>>['greatv02', '001', 'jam.mb']

b = re.findall(r'\d+', filename)
>>['02', '001']

有没有办法用这些线分割字符串?

parts = re.split('_v###_',filename)

parts = re.split('_v*_',filename)

4 个答案:

答案 0 :(得分:1)

丑陋,但你可以partition两次文件名

>>> filename.partition('_v')[2].partition('_')[0]
'001'

答案 1 :(得分:1)

您可以使用lookarounds

>>> filename = 'greatv02_v001_jam.mb'
>>> import re
>>> re.findall(r'(?<=_v)\d+', filename)
['001']
>>> 

>>> filename = 'greatv02_v001_av456jam.mb'
>>> re.findall(r'(?<=_v)\d+', filename)
['001']

>>> filename = 'greatv02_v001_v456jam.mb'
>>> re.findall(r'(?<=_v)\d+', filename)
['001', '456']
>>> 

答案 2 :(得分:1)

使用正则表达式的分组:

.*_v(\d+).*

演示:

>>> filename = 'greatv02_v001_jam.mb'
>>> pattern = re.compile(r'.*_v(\d+).*')
>>> re.search(pattern, filename).group(1)
'001'

答案 3 :(得分:1)

正则表达式_v(?P<version>\d+).*

>>> regex = re.compile("_v(?P<version>\d+).*")
>>> r = regex.search(string)

# List the groups found
>>> r.groups()
(u'001',)

# List the named dictionary objects found
>>> r.groupdict()
{u'version': u'001'}

# Run findall
>>> regex.findall(string)
[u'001']

# Run timeit test
>>> setup = ur"import re; regex =re.compile("_v(?P<version>\d+).*");string="""greatv02_v00 ...
>>> t = timeit.Timer('regex.search(string)',setup)
>>> t.timeit(10000)
0.005126953125