Python 将整数从一个字符串移动到另一个字符串?
我正在研究在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=“
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'