在python中,如何从列表的每一项中提取一些字符?
例如,在列表中,每个项目(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) 不起作用。
谢谢
发布于 2012-01-08 13:55:02
考虑使用正则表达式:
import re
pattern = re.compile(r'^cfn(\d+)e(\d+)')
a, b = pattern.match('cfn99e1195_1.lp').groups()发布于 2012-01-08 15:23:44
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当然,patter可以重用于所有类似的匹配操作。
发布于 2012-01-08 13:56:42
这一点:
nodeNum = modelName(findN, findE)这没有多大意义。您试图在这里调用字符串,就好像它是一个函数一样。
你想要的是:
nodeNum = modelName[findN + 1: findE]但是请记住,如果没有找到子字符串,.find()可以返回-1。
因此,至少用.index()替换.find(),它做同样的事情,但如果找不到子字符串,则会引发异常。
您可能还希望考虑使用正则表达式来提取数字。
https://stackoverflow.com/questions/8775703
复制相似问题