Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将整数从一个字符串移动到另一个字符串?_Python_String_Iteration - Fatal编程技术网

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

Python 将整数从一个字符串移动到另一个字符串?,python,string,iteration,Python,String,Iteration,我正在研究在python读取字符串时向字符串添加数字 所以如果我有一个字符串a=“253+” 然后我会有一个空字符串b 那么,我如何让python读取2,将其添加到字符串b,然后读取5并将其添加到字符串b,然后添加5并将其添加到字符串b,当它遇到非整数的内容时,它停止函数 那么字符串b将是b=“253” 在迭代中是否有一个特定的调用会要求整数,然后将i添加到另一个字符串中 tl;博士 我想使用迭代将数字从一个字符串添加到另一个字符串,当它达到非整数时停止 字符串b将是空字符串,字符串a将是a=“

我正在研究在python读取字符串时向字符串添加数字

所以如果我有一个字符串
a=“253+”

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

那么,我如何让python读取2,将其添加到字符串b,然后读取5并将其添加到字符串b,然后添加5并将其添加到字符串b,当它遇到非整数的内容时,它停止函数

那么字符串b将是
b=“253”

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

tl;博士

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

字符串b将是空字符串,字符串a将是
a=“253+”

调用完成后,strng b将等于
b=“253”


我知道这听起来像是一个家庭作业问题,但事实并非如此。如果您还需要澄清什么,我很乐意。

问题有点不清楚,但这就是您要找的吗

a = "123+"
b=""

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

运行此操作将导致此
b
123
,并中断
+
字符。听起来,目前对您来说比较棘手的部分是
try..ValueError
位除外。并不是说我不必在发生
ValueError
时中断循环,我可以继续循环字符串中的剩余字符,忽略那些无法解析为int的字符,这里有一个从字符串中提取数字的简单方法:

In [13]: a="253+"

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

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

希望这有帮助

使用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
你能填一下“#something”吗

将在
a
中不是数字的第一个字符处停止


另一种方法是使用正则表达式模式。您可以使用模式
r'\D'
在非数字上输入字符串:

In [208]: import re

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

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

>>> 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'

我喜欢这个,但它跳过了非数字。我应该递归地运行它,并让它成为一个else语句,在它停止的地方吗?是的,对不起,在你的问题中没有看到这一点。上面是修改过的代码。不过我真的很喜欢这种递归。作为一个新事物,递归比迭代容易得多,所以我非常感谢递归地看到这一点!我写的解决方案是迭代的。你是说你想递归地看吗?哦,很抱歉。我是python的新手。我不需要特别递归或迭代地使用它,但我总是认为如果它是if/else命令,那么它就是一个递归函数。是的,itertools是标准库的一部分。谢谢,我对python有点陌生,这是一个非常酷的工具!多谢各位!只需使用正则表达式并在“[^0-9]”上拆分即可。或在“[0-9]+”上匹配
>>> 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'