Python:如何采用“ 2(1,4)”格式输入?

时间:2019-02-27 10:14:32

标签: python python-3.x input

通常,我们应该采用2 1 4格式的输入,分别将其分配给a,b,c。

a,b,c=map(int,input().split())

类似地,现在我们必须接受如下输入:2(1,4)

我被要求按以下顺序进行输入:分配给a = 2的值,后跟一个空格,其他两个输入b = 1和c = 4放在方括号内,并用逗号分隔。

我尝试过,代码就像:

import re
s=re.split(r' ''(|'',|','2 (1,4)',maxsplit=3)

1 个答案:

答案 0 :(得分:0)

假设您所有的输入都是数字序列, 正则表达式可以是例如:

(?P<a>\d+) \((?P<b>\d+),(?P<c>\d+)\)

具有每个输入的命名捕获组。

有关工作示例,请参见:https://regex101.com/r/JvebjG/1

Python代码示例:

import re

p = re.compile(r'(?P<a>\d+) \((?P<b>\d+),(?P<c>\d+)\)')
m = p.search('22 (12,45)')
a, b, c = map(int, (m.group('a'), m.group('b'), m.group('c')))
print('a: {}, b: {}, c: {}'.format(a, b, c))

结果是:

a: 22, b: 12, c: 45

或者,如果您更喜欢split

拆分模式可以是:[() ,]+,即打开或关闭 括号,空格和逗号(实际上是它们的非空序列)。

但是请注意,在这种情况下,最后的“)”也是一个“剪切”字符, 因此它后面的空字符串是拆分的第四结果。

因此以下代码中的s列表具有四个元素,应避免 拆包时出现执行错误,您应该只拆解首字母3 元素。

import re

src = '22 (12,45)'
s = re.split(r'[() ,]+', src, maxsplit=3)
print(s)
a, b, c = map(int, s[0:3])
print('a: {}, b: {}, c: {}'.format(a, b, c))

打印结果与上面相同。