我想提取字符串中包含的所有数字。我不能使用正则表达式,还有其他方法吗?
示例:userVariable = "someTextWithNumbers432andTextwith331">
结果:[432331]
从itertools中试试这个groupby
。如果有什么问题,请问我。
from itertools import groupby
s = "your long string"
for k, g in groupby(s, key=lambda ch: ch.isdigit()):
if k: print(''.join(list(g))) # you can use result.append() here too
第二个例子:
result = []
>>> for k, g in groupby(s, key=lambda ch: ch.isdigit()):
if k: result.append(int(''.join(list(g)))) # convert the joined digits to integer
>>> print(result)
[432, 331]
这样做的一种方法是创建一个空列表和一个临时字符串变量,然后遍历字符串中的字母。对于每次迭代,检查当前字符是否为数字。如果是,则将其追加到临时字符串。如果不是,检查temp字符串是否为空。如果是空的,什么都不做。如果在临时字符串中有一个值(比如'1345'),将临时字符串的值添加到列表中,并将临时字符串的值重置回"。你需要确保在循环结束时处理了临时字符串中有一个数字的边缘情况,这样你就不会有一个不完整的列表。
下面是一些伪代码:
list = []
temp = ''
for char in string {
if char is digit {
append char to temp
}
else {
if temp != '' {
append temp to list
temp = ''
}
}
}
if temp != '' {
append temp to list
}
为什么不使用正则表达式呢?这里有一种方法
string="".join([x if (x.isdigit()) else " " for x in list(string)]
).strip().replace(' ',',',1
).replace(' ','')
print("Result:", [int(i) for i in string.split(',')])
Result: [432, 331]