Извлечение числа из строки в Python

Я новичок в Python и у меня есть String, я хочу извлечь числа из строки. Например:

str1 = "3158 reviews"
print (re.findall('\d+', str1 ))

Выход: ['4', '3']

Я хочу получить только 3158, как Integer, а не как List.

Ответы

Ответ 1

Вы можете filter строку цифрами, используя метод str.isdigit,

>>> int(filter(str.isdigit, str1))
3158

Ответ 2

Этот код работает отлично. Есть определенная проблема:

>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']

Ответ 3

Ваше регулярное выражение выглядит правильно. Вы уверены, что не ошиблись с именами переменных? В вашем коде выше вы total_hotel_reviews_string и str.

>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']

Ответ 4

Если формат такой простой (пробел отделяет число от остальных), тогда

int(str1.split()[0])

сделал бы это

Ответ 5

Чтобы извлечь одно число из строки, вы можете использовать re.search(), который возвращает первое совпадение (или None):

>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158

Ответ 6

IntVar = int("".join(filter(str.isdigit, StringVar)))

Ответ 7

Может возникнуть небольшая проблема с кодом из ответа Вишну. Если в строке нет цифр, она вернет ValueError. Вот мое предложение избегать этого:

>>> digit = lambda x: int(filter(str.isdigit, x) or 0)
>>> digit('3158 reviews')
3158
>>> digit('reviews')
0

Ответ 8

Мой ответ не требует никаких дополнительных библиотек, и его легко понять. Но вы должны заметить, что если в строке более одного числа, мой код объединит их вместе.

def search_number_string(string):
    index_list = []
    del index_list[:]
    for i, x in enumerate(string):
        if x.isdigit() == True:
            index_list.append(i)
    start = index_list[0]
    end = index_list[-1] + 1
    number = string[start:end]
    return number

Ответ 9

Выше решения, кажется, принимают целые числа. Вот небольшая модификация, разрешающая десятичные дроби:

num = float("".join(filter(lambda d: str.isdigit(d) or d == '.', inputString)

(Не учитывает - подписывает, и предполагает, что любой период правильно помещен в цифровую строку, а не просто какой-то период на английском языке. Он не создан, чтобы быть неразрушимым, но работал для моего случая данных.)

Ответ 10

Используйте это, это для извлечения числа из STRING в общем.

Чтобы получить все числовые вхождения.

* функция split для преобразования строки в список, а затем понимание списка, которое может помочь нам перебирать список и функция цифр помогает получить цифру из строки.

получить номер из строки

использовать понимание списка + isdigit()

test_string = "i have four ballons for 2 kids"

print("The original string : "+ test_string)


# list comprehension + isdigit() +split()

res = [int(i) for i in test_string.split() if i.isdigit()]
print("The numbers list is : "+ str(res))

Чтобы извлечь числовые значения из строки в Python

* Найти список всех целых чисел в строке, разделенных строчными буквами, используя re.findall(expression,string).

* Преобразуйте каждое число в виде строки в десятичное число, а затем найдите его максимум.

import re 
 def extractMax(input):

# get a list of all numbers separated by lower case characters

 numbers = re.findall('\d+',input) 



# \d+ is a regular expression which means one or more digit

number = map(int,numbers)
print max(numbers)
if __name__=="__main__":
input = 'sting'
extractMax(input)

Ответ 11

a = []
line = "abcd 3455 ijkl 56.78 ij"
for word in line.split():
 try:
  a.append(float(word))
  except ValueError:
  pass
print(a)

ВЫХОД

3455.0 56.78

Ответ 12

Я новичок в кодировании. Это моя попытка ответить на вопросы. Использовал версию Python3.7 без импорта каких-либо библиотек.

Этот код извлекает и возвращает десятичное число из строки, состоящей из наборов символов, разделенных пробелами (словами).

Внимание: при наличии более одного числа возвращается последнее значение.

line = input ('Please enter your string ')
for word in line.split():
    try:
        a=float(word)
        print (a)
    except ValueError:
        pass