Скажем, у меня есть строка данных, которая может иметь форматирование, которое меняется. Номинально данные в строке будут разделены пробелами, но это не всегда так, поэтому простой .split(' ')
не будет работать в этом случае.разделяет строку с несколькими разделителями И извлекает только одиночные символы
Пример строка:
string = '2012 05 06 04:20:00.0500 FOOBAR 4.7E+10 -55 33.0 555~2767 B 12 \r\n'
Чтобы получить все номера мне нужно, которые могут содержать показатели, начинаются с -, +, или ~, или не имеют разделения пространства их можно использовать:
re.findall(r'[~+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?', string)
# giving the result;
['2012', '05', '06', '04', '20', '00.0500', '4.7E+10', '-55', '33.0', '555', '~2767', '12']
Мне также нужен только один символ (в данном случае B
) из строки. Этот одиночный символ может быть либо B, F, или О, и я могу получить это и избежать FOOBAR
в моей строке с помощью:
re.findall(r'((?:(?:\b))[FBO]\b)', string)
# giving the result:
['B']
Но что мне нужно, чтобы получить результат, который сочетает в себе два результата выше. Я всегда мог бы добавить список со вторым результатом, но мне бы очень хотелось, чтобы позиция результатов в соответствующем списке отображалась в том порядке, в котором они существуют в исходной строке string
. То есть, мне нужен список, который выглядит следующим образом:
['2012', '05', '06', '04', '20', '00.0500', '4.7E+10', '-55', '33.0', '555', '~2767', 'B', '12']
Любые идеи? Или есть лучший способ?
Не используйте 'str' как имя переменной, даже если это просто для этого примера. Вы затеняете встроенную ['str'] (http://docs.python.org/library/functions.html#str), поэтому ее нельзя вызвать. – jamylak
Пропуск суждения, называя мою строку для этого примера ... Я изменил ее на «строку» в надежде, что другие не будут следовать за мной по темной улице с односторонним движением. – BFTM