从Python中的String中提取Number

时间:2014-11-09 06:39:51

标签: python string python-3.x

我是Python的新手,我有一个字符串,我想从字符串中提取数字。例如:

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

输出为['4', '3']

我想只获得3158,最好是整数,而不是List。

16 个答案:

答案 0 :(得分:72)

您可以使用filter方法{<1}}字符串数字

str.isdigit

答案 1 :(得分:23)

此代码工作正常。肯定存在一些其他问题:

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

答案 2 :(得分:8)

你的正则表达式看起来是正确的。你确定你的变量名称没有错吗?在上面的代码中,您混合了total_hotel_reviews_stringstr

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

答案 3 :(得分:7)

如果格式那么简单(空格将数字与其余格式分开)则

int(str1.split()[0])

会这样做

答案 4 :(得分:3)

要从字符串中提取单个数字,可以使用re.search(),它返回第一个匹配项(或None):

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

答案 5 :(得分:2)

您已经非常接近最终答案了。您的 re.finadall 表达式仅缺少用于捕获所有检测到的数字的括号:

<块引用>

re.findall( '(\d+)', str1 )

对于像 str1 = "3158 reviews, 432 users" 这样的更通用的字符串,此代码将产生:

<块引用>

输出:['3158', '432']

现在要获取整数,您可以map int 函数将字符串转换为整数:

<块引用>

A = list(map(int,re.findall('(\d+)',str1)))

或者,您可以使用这种单行循环:

<块引用>

A = [ int(x) for x in re.findall('(\d+)',str1) ]

两种方法都同样正确。它们产生 A = [3158, 432]

原始问题的最后一个 result 将是数组 A 中的第一个条目,因此我们得出以下任何表达式:

<块引用>

result = list(map(int,re.findall( '(\d+)' , str1 )))[0]

<块引用>

result = int(re.findall( '(\d+)' , str1 )[0])

即使 str1 中只有一个数字,re.findall 仍会返回一个列表,因此您需要指定您希望获取找到的第一个条目 A[0]。< /p>

答案 6 :(得分:1)

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

答案 7 :(得分:1)

最适合每种复杂类型

str1 = "sg-23.0 300sdf343fc  -34rrf-3.4r" #All kinds of occurrence of numbers between strings
num = [float(s) for s in re.findall(r'-?\d+\.?\d*', str1)]
print(num)

输出:

[-23.0, 300.0, 343.0, -34.0, -3.4]

答案 8 :(得分:0)

Vishnu的答案代码可能存在一些问题。如果字符串中没有数字,则返回ValueError。这是我的建议避免这个:

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

答案 9 :(得分:0)

以上解决方案似乎假设整数。这是一个允许小数的小修改:

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

(不考虑-号,并假定任何句点都正确地放置在数字字符串中,而不仅仅是周围存在一些英语句点。它不是不可破坏的,但适用于我的数据情况。)

答案 10 :(得分:0)

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

答案 11 :(得分:0)

我是编码的初学者。这是我尝试回答的问题。使用了Python3.7版本,但未导入任何库。

此代码从由空格(单词)分隔的字符集组成的字符串中提取并返回十进制数字。

注意:如果有多个数字,它将返回最后一个值。

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

答案 12 :(得分:0)

您可以使用以下方法从字符串中提取所有数字。

def extract_numbers_from_string(string):
    number = ''
    for i in string:
        try:
            number += str(int(i))
        except:
            pass
    return number

(或)您可以使用 i.isdigit()i.isnumeric(在 Python 3.6.5 或更高版本中)

def extract_numbers_from_string(string):
    number = ''
    for i in string:
        if i.isnumeric():
            number += str(int(i))
    return number


a = '343fdfd3'
print (extract_numbers_from_string(a))
# 3433

答案 13 :(得分:0)

对于python3

input_str = '21ddd3322'
int(''.join(filter(str.isdigit, input_str)))

> 213322

答案 14 :(得分:-1)

我的回答不需要任何额外的库,而且很容易理解。但是你必须注意,如果字符串中有多个数字,我的代码会将它们连接在一起。

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

答案 15 :(得分:-1)

使用此功能,这是为了从通用字符串中提取数字。

获取所有出现的数字。

* 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)