在python中,如何从列表的每个项目中提取一些字符?

时间:2012-01-08 05:49:43

标签: python list

在python中,如何从列表的每个项目中提取一些字符?

e.g。在列表中,每个项目(modelName)都有

  cfn99e1195_1.lp

里面的数字可能不同。

我需要得到99和1195.

我试过

 findN = modelName.find('n')  
 findE = modelName.find('e')
 nodeNum = modelName(findN, findE) 
 findBar = modelName.find('_')  
 arcNum = modelName(findE, findBar) 

不起作用。

感谢

3 个答案:

答案 0 :(得分:1)

考虑使用正则表达式:

import re

pattern = re.compile(r'^cfn(\d+)e(\d+)')
a, b = pattern.match('cfn99e1195_1.lp').groups()

答案 1 :(得分:1)

groupdict可能更具说明性,也可以检查匹配是否真的存在:

pattern = re.compile(r'^cfn(?P<a>\d+)e(?P<b>\d+)')
m = pattern.match('cfn99e1195_1.lp')
d = {}
if m:
    d = m.groupdict()

# the result will be in the form {'a': '99', 'b': '1195'}
# or {} if not matched

当然,模式可以重复用于所有类似的匹配操作。

答案 2 :(得分:0)

此:

nodeNum = modelName(findN, findE)

没有多大意义。你试图在这里调用字符串就像它是一个函数一样。

你想要的是这个:

nodeNum = modelName[findN + 1: findE]

但请记住,如果找不到子字符串,.find()可以返回-1

所以至少,将.find()替换为.index(),它会执行相同的操作,但如果找不到子字符串,则会引发异常。

您可能还想考虑使用正则表达式来提取数字。