How to extract a floating number from a string [duplicate]
Как извлечь плавающее число из строки
У меня есть несколько строк, похожих на Current Level: 13.4 db., и я хотел бы извлечь только число с плавающей запятой. Я говорю "с плавающей запятой", а не "десятичное", поскольку иногда оно бывает целым. Может ли регулярное выражение сделать это или есть способ получше?
Переведено автоматически
Ответ 1
Если ваше число с плавающей запятой всегда выражается в десятичной системе счисления, то что-то вроде
>>> import re >>> re.findall("\d+\.\d+", "Current Level: 13.4db.") ['13.4']
может быть достаточно.
Более надежной версией было бы:
>>> re.findall(r"[-+]?(?:\d*\.*\d+)", "Current Level: -13.2db or 14.2 or 3") ['-13.2', '14.2', '3']
Если вы хотите проверить вводимые пользователем данные, вы также можете проверить наличие числа с плавающей запятой, перейдя непосредственно к нему:
user_input = "Current Level: 1e100 db" for token in user_input.split(): try: # if this succeeds, you have your (first) float print(float(token), "is a float") except ValueError: print(token, "is something else")
# => Would print ... # # Current is something else # Level: is something else # 1e+100 is a float # db is something else
Ответ 2
Возможно, вам захочется попробовать что-то подобное, что охватывает все основы, в том числе не полагаться на пробелы после числа:
Это регулярное выражение не поддерживает международные форматы, где запятая используется в качестве символа-разделителя между целой и дробной частями (3,14159). В этом случае замените all \. на [.,] в приведенном выше регулярном выражении с плавающей запятой.
Regular Expression International float [-+]?(\d+([.,]\d*)?|[.,]\d+)([eE][-+]?\d+)?
Ответ 4
re.findall(r"[-+]?\d*\.?\d+|\d+", "Current Level: -13.2 db or 14.2 or 3")
как описано выше, работает действительно хорошо! Однако есть одно предложение:
re.findall(r"[-+]?\d*\.?\d+|[-+]?\d+", "Current Level: -13.2 db or 14.2 or 3 or -3")
также вернет отрицательные значения int (например, -3 в конце этой строки)