我想知道是否可以转换这样的字符串:
"0, Hello, [item1, item2]"
进入这个:
(0, "Hello", [item1, item2])
在python 3.如果可能,我该怎么做?
这是我需要的地方:
A = input("Give me a integer, string and a list\n")
因为输入总是返回一个字符串,所以我不能在程序中使用给定的值。
答案 0 :(得分:1)
我不知道这是否是OP希望实现的解决方案,因为我认为item1
和item2
是已经分配的两个变量:
sample = '0, Hello, [item1, item2]'
item1, item2 = 'A string', True
groups = re.match(r'(\d+),\s?(\w+),\s?(\[(\w+,\s?)*\w+\])', sample)
result = int(a.group(1)), a.group(2), eval(a.group(3))
结果:
(0, 'Hello', ['A string', True])
答案 1 :(得分:0)
对您的问题最简单的解决方案是单独读取输入3次。除此之外你可以做到
input = input.split(',')
#cast it or not
number = int(input[0])
string = input[1]
list = ','.join(input[1:])
final = tuple([number,string,list])
列表包含字符串内容。将它们转换为适当的值,或者如果它们的已知变量尝试使用eval()
。如果使用eval
答案 2 :(得分:0)
您可以使用正则表达式:
>> import re
>> s = '0, Hello, [item1, item2]'
>> tuple(re.split(',+(?![^\[]*\])', s))
('0', ' Hello', ' [item1, item2]')
答案 3 :(得分:-1)
那么,应该这样工作:
import re
a = "0, Hello, [item1, item2]"
b = re.findall("|".join([r"\[.*\]", r"[0-9]", r"[a-zA-Z]+"]), a)
返回:
['0', 'Hello', '[item1, item2]']
现在您有3个所需元素,您可以将最后一个元素拆分为项目列表。
c = b[2][1:-1].split(", ")
返回:
['item1', 'item2']
在最后一行之后,您可以根据需要转换项目。像那样:
[int(a) for a in c]
将为您提供列表元素的整数表示。