用Python正则表达式验证字符串类型

1 投票
3 回答
1828 浏览
提问于 2025-04-15 18:46

我想用Python做以下几件事:

  1. 检查一个UTF8字符串是否是整数。
  2. 检查一个UTF8字符串是否是浮点数。
  3. 检查一个UTF8字符串的长度是否在1到255之间。
  4. 检查一个UTF8字符串是否是有效的日期。

我对Python完全是新手,我觉得前面几项应该可以用正则表达式来完成,最后一项可能不太一样。谢谢你的帮助!

3 个回答

1

1. 使用int()函数并检查是否有错误。

2. 使用float()函数,但你说的“浮点数”是什么意思呢?

3. 先用int()函数转换,然后用if语句检查结果。

4. 使用日期时间格式化的方法。

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
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
    

编辑:还有一点需要注意。因为你特别提到了UTF-8字符串,所以先把它们解码成Unicode是有意义的。可以这样做:

my_unicode_string = my_utf8_string.decode('utf8')

有趣的是,当你尝试用int()把一个Unicode字符串转换成整数时,比如说,你并不局限于大多数地方使用的“西方阿拉伯”数字。int(u'١٧')int(u'१७')都会正确解码为17,尽管它们分别是印度-阿拉伯数字和天城文数字。

撰写回答