Python3 - 从用户输入的字符串中提取数据。可能格式错误

时间:2017-02-03 21:16:55

标签: python regex string python-3.x split

我一直试图找到一种方式来获取用户输入,其形式应该是: [X <子> 1 ,Y <子> 1 ] [X <子> 2 ,Y <子> 2 ] 这样,x 1 ,x 2 ,y 1 ,y 2 是整数值。

重点是让棋子从位置 a 移动到位置 b

我的目标是让用户输入:

move = input("\nSyntax: '[x,y][x,y]'")

我的目的是拆分字符串,以便最终得到两个列表。

从= [x 1 ,y 1 ]

To = [x 2 ,y 2 ]

我发现的最近的事情是: Extract the data specified in brackets '[ ]' from a string message in python

但是,对于我这种简单的字符串,我确信这是一种更简单的方式 - 最有效的方法。此外,在这种情况下,用户可能会输入错字等...我如何确保它的格式为[x 1 ,y 1 ] [X <子> 2 ,Y <子> 2 ]?

2 个答案:

答案 0 :(得分:1)

假设您的输入字符串如下:

my_str =  '[x1,y1][x2,y2]'

要将值存储在单独的变量中,您可以从角落strip [],并将][替换为,。然后将,上的字符串拆分为:

x1, y1, x2, y2 = my_str.strip('[]').replace('][', ',').split(',')

x1y1x2y2保留的值为:

>>> x1, y1, x2, y2
('x1', 'y1', 'x2', 'y2')

然后,为了将值存储到列表,您可以执行以下操作:

from_list = [x1, y2]
to_list = [x2, y2]

如果您可以将输入字符串的格式从[x1,y1][x2,y2]更改为[x1,y1],[x2,y2]][之间的逗号),那么您可以使用ast.literal_eval作为:

>>> from ast import literal_eval
>>> my_str =  '[1,2],[3,4]'

>>> from_list, to_list = literal_eval(my_str)

答案 1 :(得分:1)

ove = "\nSyntax: '[12,22][32,4215]'"

a1 = ove.find('[') + 1
a2 = ove.find(']')
a3 = ove.rfind('[') + 1
a4 = ove.rfind(']')

print(a3)
print(a4)
From = [int(s) for s in ove[a1:a2].split(',')]
To = [int(s) for s in ove[a3:a4].split(',')]

print(From, To)

经过测试。