Найти - Пользователи
Полная версия: Парсинг строки на наличие числа
Начало » Python для новичков » Парсинг строки на наличие числа
1
Archie
Приветствую!

У меня есть список и такие значения
 ["215", "string", "22", "John"]

Как перебирая этот список определить что “215” и “22” это строки из чисел.

Столкнулся с такой проблемой если перебирать список и преобразовать например так:
"215" -> int() -> isinstance(int(num), int) -> True

Отлично, правда если
"John"  -> int()  -> [b]Error[/b]

EBFE
>>> def is_num(candidate):
...   try:
...     float(candidate)
...     return True
...   except ValueError:
...     return False
...
>>> map(is_num,['0x20','-1.02','0xJohn','foo'])
[False, True, False, False]
или если все числа в {N}:
>>> "42".isdigit()
True
>>> "John".isdigit()
False
>>> "-2".isdigit()
False
>>> "0x2".isdigit()
False
reclosedev
Archie, список не видно, оберните в
[code python][/code]

EBFE
return bool(float(candidate))
bool ни к чему, нужно просто ловить ValueError, иначе возможно такое:
In [1]: bool(float('0.0'))
Out[1]: False
Кроме того, что EBFE уже посоветовал, еще можно регулярные выражения использовать.
EBFE
reclosedev
bool ни к чему, нужно просто ловить ValueError
Спасибо - все верно. Решил сэкономить строку
RegEx использовать конечно можно - но муторно очень (или искать готовый или долго и хорошо думать)
fata1ex
EBFE,
'^\d+$'

И не надо говорить про знак минус и точку. И про экспоненту :)
Всё просто. Но регулярки здесь не нужны.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB