Как удалить все символы из строки кроме цифр и точек?
Мне нужно удалить из строки все символы кроме цифр и точки Если можете, то продемонстрируйте пожалуйста это в качестве кода Значения для примеров оставлю ниже
Для примера:
¥ 362.25
52,50€
Ответы (2 шт):
Автор решения: greymaster
→ Ссылка
Я проанализировал данную задачу и немного интерпретировал, мой код позволяет найти все числа в строке, в том числе отрицательные и вещественные, таким образом он отвечает и на ваш запрос
a = input()
# a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref "
def isnum(num):
key = "1234567890"
num = str(num)
if num in key and num != "":
return True
return False
def find_num(text, float_sep=None, unary_sing=None):
text += " " # Увеличивает длину исходной строки на 1
if unary_sing is None: # Установка стандартных значений
unary_sing = ["-"]
if float_sep is None:
float_sep = [",", "."]
nums = [] # Объявление списка для чисел
number = ""
last_sym = ""
flag_float = False
flag_unary = False
for sym in text:
if isnum(sym): # Проверка символа на число
number += last_sym
last_sym = sym
elif sym in float_sep and \
not flag_float and \
isnum(last_sym):
# Проверка на вхождение в список, проверка на единоличность, проверка на число прошлого символа
number += last_sym
last_sym = sym
flag_float = True
elif sym in unary_sing and \
not flag_unary and\
number == "":
# Проверка на вхождение в список, проверка на единоличность, проверка на первое число
last_sym = sym
flag_unary = True
elif number:
# Если не одно условие выше не выполнилось, то проверяет было ли найдено хоть что-то
if isnum(last_sym): # Проверяет последний символ на число, помогает избежать потери последнего символа
number += last_sym
nums.append(number)
number = "" # Обнуление всех параметров
flag_float = False
flag_unary = False
last_sym = ""
if sym in unary_sing: # Частный случай если символ начинает новое число
last_sym = sym
return nums
g = find_num(a)
print(g)
# При a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref "
# Выведет: ['362.25', '52,50', '435', '-43', '-7.3', '47432', '-38']
Автор решения: Yury
→ Ссылка
Если уж оставлять и запятую (где Евро), то я бы предложил так:
import re
def func(x):
return (re.findall(r'-[0-9.,]+|[0-9.,]+', x))
a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref "
print (func(a))
#a = ['362.25', '52,50', '435', '-43', '-7.3', '47432', '-38']