Hateman31
@Hateman31
Делиться мыслями - это круто!

Как определить тип числа с помощью regexp?

# В функцию подается строка.
# Не гарантируется, что строка будет корректной и 
#~ содержать собственно число.
import re
def foo(s):
	if some_regexp_int: #проверка на int
		return(int(s))
	elif some_regexp_float: # проверка на float
		return(float(s))
	else:
		print('Uncorrect string!!')
# Как и какую нужно использовать функцию re,
#~ чтобы выполнилось одно из условий,
#~ при том, что кроме числа в строке не должно быть ничего
#~ (гарантируется: пробелов не будет, даже внутри числа)?
  • Вопрос задан
  • 2624 просмотра
Решения вопроса 2
Disassociative
@Disassociative
re.match("[0-9]+", s)
re.match("[0-9]+.[0-9]+", s)

Если возможны отрицательные числа, добавь опциональный знак "-" в начало
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
def convert(x):
    for func in (int, float, complex):
        try:
            return func(x)
        except ValueError:
            pass
    return float('NaN')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@throughtheether
human after all
Если отвлечься от регулярных выражений, то можно реализовать и так (Python 2.7):
def foo(s):
    try:
        s_int=int(s)
        return s_int
    except ValueError:
        try:
            s_float=float(s)
            return s_float
        except ValueError:
            print "Incorrect string!"

print foo('123')
print foo('123.5')
print foo('1e-10')
print foo('toster')

Из преимуществ такого подхода - поддерживается экспоненциальная запись (1e-10). Но я не уверен относительно производительности, и возможны другие нюансы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы