在python中查找并打印字符串中的所有数字

时间:2015-06-08 14:10:07

标签: python string

我需要使用FOR循环创建一个代码,该代码将查找字符串中的所有数字,然后打印出所有数字。到目前为止,我只能得到代码打印出找到的第一个号码,你可以帮我恳求吗?

这是我的代码:

def allNumbers(string):
 for numbers in string:
    if numbers.isdigit():
        return numbers

程序运行时应该如下所示:

>>> allNumbers("H3llO, H0W 4R3 y0U")
'300430'
>>> allNumbers("Good morning.")
''

''

7 个答案:

答案 0 :(得分:4)

整个事情可以用生成器表达式代替:

def allNumbers(string):
    return ''.join(x for x in string if x.isdigit())

答案 1 :(得分:1)

不要从函数中返回数字,只需将其插入列表即可。

def allNumbers(string, container=None):
  if not container:
    container = []
  for item in string:
    if item.isdigit():
      container.append(item)
  return container

更好的解决方案:

def allNumbers(orig_str):
  return ''.join(filter(orig_str, str.isdigit))

是的,只有在@Daniels回答之后才能想到oneliner是蹩脚的:P

答案 2 :(得分:1)

您可以使用列表。然后将其作为您想要的输出返回。

def allNumbers(string):
    l = []
    for numbers in string:
        if numbers.isdigit():
            l.append(numbers)
    return ''.join(l)

答案 3 :(得分:1)

如果我没弄错的话,你要求整数,而不是字符串中的每个数字。 如果是这种情况,则会在字符串中显示所有出现的单独整数:

import re
def allNumbers(string):
    regex = re.compile(r'\d+')
    return regex.findall(string)

例如:

s = "123 sun 321 moon 34"
for num in allNumbers(s):
    print num

输出:

123
321
34

N.B。:输出是一个字符串列表。如果需要数字,请将每个元素转换为整数。

如果输入字符串包含浮点数(例如30.21),那么它们的整数和小数部分将被解释为不同的整数(30和21)。

如果没有匹配项,则输出为空列表[]

答案 4 :(得分:1)

#!/usr/bin/python
# -*- coding: utf-8 -*-

s="H3ll0, H0W 4R3 y0U"
result=''
for char in s:
    try:
        number=int(char)
        print number
        result=result+char
    except:
        pass

print 'Result:', result

输出

3
0
0
4
3
0
Result: 300430

答案 5 :(得分:1)

将使用数字>的解决方案9并且不使用正则表达式:

def allnumbers(s):
    i = 0
    end = len(s)
    numbers = []
    while i < end:
        if s[i].isdigit():
            number = ''
            while i < end and s[i].isdigit():
                number += s[i]
                i += 1
            numbers.append(int(number))
        else:
            i += 1
    return numbers

答案 6 :(得分:1)

这是另一种方法:

nodejs

输出:

>>> a = 'ad56k34kl56'
>>> x = [i for i in a if i.isdigit()]
>>> ','.join(x)