2012-01-08 4 views
0

В python, как извлечь некоторый символ из каждого элемента списка?В 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) 

не работает.

благодаря

ответ

1

рассмотреть возможность использования регулярных выражений:

import re 

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

modelName = array [0], a, b = pattern.match (modelName) .groups(), я получил ошибку: AttributeError: объект «NoneType» не имеет атрибутных «групп» – user1000107

+0

Это означает, что шаблон не соответствует Струна. Что такое массив [0]? – qiao

+0

для INFILE в glob.glob (os.path.join (путь, 'НКС * е * _1.lp_obj_node_arc.txt')): \t \t печати "Текущий файл:" + входной_файл \t \t массив = [] \t \t для линии в INFILE: \t \t # array.append (линия) \t \t \t массив = line.split() \t \t \t перерыв – user1000107

0

Это:

nodeNum = modelName(findN, findE) 

не имеет особого смысла. Вы пытаетесь вызвать строку здесь, как если бы это была функция.

Что вы хотите, это:

nodeNum = modelName[findN + 1: findE] 

Но помните, что .find() может вернуться -1, если подстрока не найдена.

Так что, по крайней мере, замените .find() на .index(), который делает то же самое, но вместо этого создает исключение, если подстрока не найдена.

Вы также можете рассмотреть возможность использования регулярных выражений для извлечения чисел.

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 

Конечно, скороговорка может быть повторно использована для всех подобных операций сопоставления.