请帮助我,我不明白此错误。
我输入了str,但它们不起作用,并且出现错误-无法将序列乘以'str'类型的非整数
import re
text = 'a3b4c2e13b1'
numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)
numbs_str = ','.join(numbs)
letters_str = ','.join(letters)
for i in range(len(letters_str)):
result = letters_str[i] * numbs_str[i]
我需要从数字中得出这样的字母数: a3b4c2e13b1 aaabbbbcceeeeeeeeeeeeeeeb
答案 0 :(得分:1)
这是使用zip
和str.join
的一种方法。
例如:
import re
text = 'a3b4c2e13b1'
numbs = re.findall(r'(\d+)',text)
letters = re.findall(r'(\D)',text)
print("".join(k*int(v) for k, v in zip(letters, numbs)))
输出:
aaabbbbcceeeeeeeeeeeeeb
答案 1 :(得分:0)
由于将str乘以str,导致出现此错误。 您需要将多个str转换为int。
因此,您可以像这样更新代码
import re
text = 'a3b4c2e13b1'
numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)
numbs_str = map(int, numbs)
result = ""
for le, num in zip(letters, numbs_str):
result += le * num
print(result)
输出
aaabbbbcceeeeeeeeeeeeeb
答案 2 :(得分:0)
您可以在加入数字和字母列表的同时删除“,”。还要将数字强制转换为整数。
import re
text = 'a3b4c2e13b1'
numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)
numbs_str = ''.join(numbs)
letters_str = ''.join(letters)
result=""
for i in range(len(letters_str)):
result = result+letters_str[i] * int(numbs_str[i])
print(result)
结果是“ aaabbbbccebbb”
答案 3 :(得分:0)
我看到了解决方案的答案,但让我们仔细考虑一下您想要得到的结果。 可以说正则表达式...没问题,在您的解决方案中,您将创建带有结果的列表(numbs_str和letters_str)。
在您的for循环内,当您在结果中使用range(len())迭代字符串时,您还要尝试复制',',因为它们也是字符串的一部分。 它肯定无法正常工作。无论如何,如果您想重复该单词,请将其乘以整数而不是字符串。
一些非常简单的解决方案,没有地图和邮政编码。如您所见,当我打数字时,我将str转换为整数。处理列表,而不是字符串。
import re
text = 'a3b4c2e13b1'
numbs = re.findall(r'\d+', text)
letters = re.findall(r'\D', text)
numbs_str = ','.join(numbs)
letters_str = ','.join(letters)
# for i in range(len(letters_str)):
# result = letters_str[i] * numbs_str[i]
# print(result)
print(numbs)
print(letters)
print(numbs_str)
print(letters_str)
contents = []
for index, letter in enumerate(letters):
contents.append(letter * int(numbs[index]))
print("".join(contents))
结果:
['3', '4', '2', '13', '1']
['a', 'b', 'c', 'e', 'b']
3,4,2,13,1
a,b,c,e,b
aaabbbbcceeeeeeeeeeeeeb