将整数从一个字符串移动到另一个字符串

时间:2014-09-30 01:35:10

标签: python string iteration

我正在寻找在字符串中添加数字,因为python通过字符串读取。

所以,如果我有一个字符串a = "253+"

然后我会有一个空字符串b。

那么,我如何让python读取2,将其添加到字符串b,然后读取5并将其添加到字符串b,然后添加5并将其添加到字符串b,当它遇到不是但是整数,它会停止功能。

然后字符串b将是b = "253"

迭代中是否有一个特定的调用要求整数,然后将i添加到另一个字符串?

TL;博士

我想使用迭代将数字从一个字符串添加到另一个字符串,当它到达非整数时停止。

字符串b将是一个空字符串,字符串a将是a="253+"

完成通话后,strng b将等于b="253"

我知道这听起来像是一个家庭作业问题,但事实并非如此。如果您需要澄清任何其他内容,我会很高兴。

6 个答案:

答案 0 :(得分:3)

这是从字符串中提取数字的简单方法:

In [13]: a="253+"

In [14]: ''.join(c for c in a if c.isdigit())
Out[14]: '253'

答案 1 :(得分:2)

问题有点不清楚,但这是你正在寻找的吗?

a = "123+"
b=""

for c in a:
   try:
     int(c)
     b = b + c
   except ValueError:
     print 'This is not an int ' + c
     break

运行此结果会导致此b123并打破+字符。对于你来说,这听起来像是try..except ValueError位的部分。并非我不必在ValueError发生时打破循环,我可以继续循环遍历字符串中的其余字符并忽略那些无法解析为int的字符

答案 2 :(得分:1)

试试这个:

a = "i889i" #Initial value of A
b = "" #Empty string to store result into

for each in a: #iterate through all characters of a
    if each.isdigit(): #check if the current character is a digit
        b += each #append to b if the current character is a digit
    else: #if current character is NOT a digit
        break #break out of for loop

print b #print out result

希望这有帮助!

答案 3 :(得分:1)

使用for循环,这相对容易。如果我们使用我们的ASCII知识,我们知道数字的ASCII值范围从48(表示0作为字符串)到57(表示9作为字符串)。

我们可以使用内置方法ord(x)找到字符的ASCII值,其中x是字符(即ord('4')等于52,整数)。

现在我们掌握了这些知识,将其添加到for循环中会很容易。我们简单地创建一个从0到字符串长度减去1的for循环。在for循环中,我们将使用我们所在的迭代作为索引,在字符串中找到该索引处的字符,最后检查其ord值是否落在我们想要的范围内。

这看起来像这样:

def method(just_a_variable):
    b = ''
    for i in range(0, len(a)):
        if (#something):
            if (#something):
                b = b+a[i]
    return b

您可以填写"#somethings"吗?

答案 4 :(得分:1)

In [201]: import itertools as IT

In [202]: a = "253+9"

In [203]: ''.join(IT.takewhile(str.isdigit, a))
Out[203]: '253'

IT.takewhile将停在a中不是数字的第一个字符处。


另一种方法是使用正则表达式模式。您可以使用模式r'\D'

split非数字上的字符串
In [208]: import re

In [209]: re.split(r'\D', a, maxsplit=1)[0]
Out[209]: '253'

答案 5 :(得分:1)

您可以使用正则表达式编写生成器并逐个生成它们:

>>> import re
>>> s='123+456abc789'
>>> nums=(m.group(1) for m in re.finditer(r'(\d+)', s))
>>> next(nums)
'123'
>>> next(nums)
'456'
>>> next(nums)
'789'