在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)
不起作用。
感谢
答案 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()
,它会执行相同的操作,但如果找不到子字符串,则会引发异常。
您可能还想考虑使用正则表达式来提取数字。