Ответ 1
Вы можете filter
строку цифрами, используя метод str.isdigit
,
>>> int(filter(str.isdigit, str1))
3158
Я новичок в Python
и у меня есть String, я хочу извлечь числа из строки. Например:
str1 = "3158 reviews"
print (re.findall('\d+', str1 ))
Выход: ['4', '3']
Я хочу получить только 3158
, как Integer, а не как List.
Вы можете filter
строку цифрами, используя метод str.isdigit
,
>>> int(filter(str.isdigit, str1))
3158
Этот код работает отлично. Есть определенная проблема:
>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
Ваше регулярное выражение выглядит правильно. Вы уверены, что не ошиблись с именами переменных? В вашем коде выше вы total_hotel_reviews_string
и str
.
>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']
Если формат такой простой (пробел отделяет число от остальных), тогда
int(str1.split()[0])
сделал бы это
Чтобы извлечь одно число из строки, вы можете использовать re.search()
, который возвращает первое совпадение (или None
):
>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158
IntVar = int("".join(filter(str.isdigit, StringVar)))
Может возникнуть небольшая проблема с кодом из ответа Вишну. Если в строке нет цифр, она вернет ValueError. Вот мое предложение избегать этого:
>>> digit = lambda x: int(filter(str.isdigit, x) or 0)
>>> digit('3158 reviews')
3158
>>> digit('reviews')
0
Мой ответ не требует никаких дополнительных библиотек, и его легко понять. Но вы должны заметить, что если в строке более одного числа, мой код объединит их вместе.
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
Выше решения, кажется, принимают целые числа. Вот небольшая модификация, разрешающая десятичные дроби:
num = float("".join(filter(lambda d: str.isdigit(d) or d == '.', inputString)
(Не учитывает - подписывает, и предполагает, что любой период правильно помещен в цифровую строку, а не просто какой-то период на английском языке. Он не создан, чтобы быть неразрушимым, но работал для моего случая данных.)
* функция split для преобразования строки в список, а затем понимание списка, которое может помочь нам перебирать список и функция цифр помогает получить цифру из строки.
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))
* Найти список всех целых чисел в строке, разделенных строчными буквами, используя 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)
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
Я новичок в кодировании. Это моя попытка ответить на вопросы. Использовал версию Python3.7 без импорта каких-либо библиотек.
Этот код извлекает и возвращает десятичное число из строки, состоящей из наборов символов, разделенных пробелами (словами).
Внимание: при наличии более одного числа возвращается последнее значение.
line = input ('Please enter your string ')
for word in line.split():
try:
a=float(word)
print (a)
except ValueError:
pass