用于验证字符串类型的python正则表达式

时间:2010-02-02 12:00:52

标签: python regex validation

我想用python执行以下操作:

  1. 验证UTF8字符串是否为整数。
  2. 验证UTF8字符串是否为浮点数。
  3. 验证UTF8字符串的长度是否为(1-255)。
  4. 验证UTF8字符串是否为有效日期。
  5. 我是python的新手,我相信这应该用正则表达式来完成,除了最后一个。感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

正则表达式不是一个好的解决方案。

  1. 验证UTF8字符串是否为整数:

    try:
      int(val)
      is_int = True
    except ValueError:
      is_int = False
    
  2. 验证UTF8字符串是否为浮点数:与上述相同,但使用float()

  3. 验证UTF8字符串的长度是否为(1-255):

    is_of_appropriate_length = 1 <= len(val) <= 255
    
  4. 验证UTF8字符串是否为有效日期:这不是一件容易的事。如果您知道正确的格式,可以使用time.strptime(),如下所示:

    # Validate that the date is in the YYYY-MM-DD format.
    import time
    try:
      time.strptime(val, '%Y-%m-%d')
      is_in_valid_format= True
    except ValueError:
      is_in_valid_format = False
    
  5. 编辑:需要注意的另一件事。由于您特别提到了UTF-8字符串,因此首先将它们解码为Unicode是有意义的。这将通过以下方式完成:

    my_unicode_string = my_utf8_string.decode('utf8')
    

    有趣的是,例如,当尝试使用int()将Unicode字符串转换为整数时,您不仅限于世界上大多数地方使用的“西方阿拉伯语”数字。 int(u'١٧')int(u'१७')将正确解码为17,即使它们分别是印度语 - 阿拉伯语和Devangari数字。

答案 1 :(得分:2)

为什么要使用正则表达式?我确信它会更慢,更麻烦。

int()float()方法或更好的isdigit()方法在这里运作良好。

a = "03523"
a.isdigit()
>>> True

b = "963spam"
b.isdigit()
>>> False

对于问题3,您的意思是“验证UTF8字符串是否为长度数(1-255)”?

为什么不:

def validnumber(n):
  try:
    if 255 > int(n) > 1:
      return True
  except ValueError:
      return False

答案 2 :(得分:1)

  1. int()并检查异常
  2. float() - 但是你的意思是漂浮?
  3. int()然后使用if
  4. 进行检查
  5. 使用日期时间格式