用Python正则表达式验证字符串类型
我想用Python做以下几件事:
- 检查一个UTF8字符串是否是整数。
- 检查一个UTF8字符串是否是浮点数。
- 检查一个UTF8字符串的长度是否在1到255之间。
- 检查一个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
正则表达式在这里并不是一个好的解决方案。
检查一个UTF8字符串是否是整数:
try: int(val) is_int = True except ValueError: is_int = False
检查一个UTF8字符串是否是浮点数:和上面的方法一样,只不过用的是
float()
。检查一个UTF8字符串的长度是否在1到255之间:
is_of_appropriate_length = 1 <= len(val) <= 255
检查一个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,尽管它们分别是印度-阿拉伯数字和天城文数字。