【发布时间】:2013-06-26 16:10:52
【问题描述】:
我需要解析来自用户的输入,使其具有以下格式之一:
1321 .. 123123
或
-21323 , 1312321
一个数字(可以是负数)、一个逗号 , 或两个点 ..,然后是另一个数字(可以是负数)。
另外,第一个数字必须小于或等于<= 到第二个数字。
如果输入没有这种格式,请再次询问用户输入。
我有
def ask_range():
raw = raw_input()
raw = raw.strip(' \t\n\r')
raw = map((lambda x: x.split("..")), raw.split(","))
raw = list(item for wrd in raw for item in wrd)
if len(raw) != 2:
print "\nexpecting a range value, try again."
return ask_range()
我不确定如何正确输入数字。
编辑
在答案的帮助下我想出的解决方案是:
def ask_range():
raw = raw_input()
raw = raw.strip(' \t\n\r')
raw = re.split(r"\.\.|,", raw)
if len(raw) != 2:
print "\nexpecting a range value, try again."
return ask_range()
left = re.match(r'^\s*-?\s*\d+\s*$', raw[0])
right = re.match(r'^\s*-?\s*\d+\s*$', raw[1])
if not (left and right):
print "\nexpecting a range value, try again."
return ask_range()
left, right = int(left.group()), int(right.group())
if left > right:
print "\nexpecting a range value, try again."
return ask_range()
return left, right
【问题讨论】:
-
看看这个relevant thread。大多数人会说使用正则表达式,但如果数字总是整数,还有更简单的方法。
标签: python parsing input numbers range