代码之家  ›  专栏  ›  技术社区  ›  khelll

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

  •  1
  • khelll  · 技术社区  · 15 年前

    我想对python执行以下操作:

    1. 验证UTF8字符串是否为整数。
    2. 验证utf8字符串是否为浮点。
    3. 验证UTF8字符串的长度(1-255)。
    4. 验证UTF8字符串是否为有效日期。

    我对Python完全陌生,我相信这应该用正则表达式来完成,除了最后一个表达式。感谢您的帮助!

    3 回复  |  直到 15 年前
        1
  •  6
  •   Max Shawabkeh    15 年前

    Regex不是一个好的解决方案。

    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
      

    编辑: 还有一件事要注意。因为您特别提到了UTF-8字符串,所以首先将它们解码为Unicode是有意义的。这将通过以下方式完成:

    my_unicode_string = my_utf8_string.decode('utf8')
    

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

        2
  •  2
  •   Dominic Bou-Samra    15 年前

    为什么要使用regex?我相信这会更慢,更麻烦。

    这个 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
    
        3
  •  1
  •   bluszcz    15 年前
    1. int()并检查异常
    2. float()-但是什么是float?
    3. int(),然后使用if检查
    4. 使用日期时间格式