在Python中检查字符串是否为“<int1>,<int2>”的确切形式

时间:2016-04-03 10:22:55

标签: python regex string

我正在将一个由两个整数组成的字符串转换为元组。我需要确保我的字符串格式化为"<int1>,<int2>"形式的逗号,并且没有多余的空格。

我知道isdigit()可以用来检查给定的字符串是否只包含数字。但是,这并不能解决所需的逗号,也没有空格。

这是我将字符串转换为整数元组的代码:

s1 = "12,24"
string_li = s1.split(',')
num_li = [int(x) for x in string_li]
num_tuple = tuple(num_li)

有人建议在这里使用正则表达式。我如何将其实现为if / else语句?这是有效的,但似乎不正确:

import re
s1 = '12,24'
if re.match("^\d+,\d+$",s1) is not None:
    print("pass")

你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

听起来像是正则表达式的工作。

import re
re.match("^\d+,\d+$", some_string)
  • ^匹配字符串
  • 的开头
  • \d+匹配一个或多个数字
  • ,匹配逗号文字
  • $匹配字符串结尾

一些测试用例:

assert re.match("^\d+,\d+$", "123,123")
assert not re.match("^\d+,\d+$", "123,123 ")  # trailing whitespace
assert not re.match("^\d+,\d+$", " 123,123")  # leading whitespace 
assert not re.match("^\d+,\d+$", "a,b")  # not digits
assert not re.match("^\d+,\d+$", "-1,3")  # minus sign is invalid

re.match的返回值为MatchObjectNone,幸运的是,它们在布尔上下文中的行为符合预期 - MatchObject是真实的,None是假的,可以看出是上面的断言。