python regex - извлечение цифр из строки с цифрами и символами - PullRequest
1 голос
/ 21 января 2020

У меня есть данные, в которых есть строки, такие как «ms2p5», «ms3», «ms10», для которых мне нужно извлечь цифры и преобразовать их в числа следующим образом.

'ms2p5' => 2.5
'ms3' => 3
'ms10' => 10

Я попробовал приведенное ниже регулярное выражение и это может получить совпадение. Одна проблема связана со значениями, имеющими символ в середине извлеченной строки, например «2p5». Как правильно использовать обобщенную функцию c, которая хорошо обрабатывает все эти случаи, преобразуя их в числовые значения c?

import re
re.search(r'\d+[p]*\d*', str).group() 

Ответы [ 3 ]

2 голосов
/ 21 января 2020

Использование str.join с re.findall:

los = ['ms2p5', 'ms3', 'ms10']
print([float('.'.join(re.findall('\d+', i))) for i in los])

Вывод:

[2.5, 3.0, 10.0]
2 голосов
/ 21 января 2020

Вы могли бы написать функцию извлечения, которая искала бы числовое значение c (с или без p для десятичной точки, заменив p на ., а затем преобразовав в float. Например:

import re

def extract_num(s):
    return float(re.search(r'\d+p?\d*', s).group().replace('p', '.'))

strs = ['ms2p5', 'ms3', 'ms10']
print([extract_num(s) for s in strs])

Выход:

[2.5, 3.0, 10.0]
1 голос
/ 21 января 2020

Если бы все строки следовали приведенным вами примерам, я бы, вероятно, просто сделал:

x = 'ms2p5'
float(x[2:].replace('p', '.'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...