gpt4 book ai didi

python re.search 返回 None 和 Object

转载 作者:行者123 更新时间:2023-12-01 04:48:44 25 4
gpt4 key购买 nike

我在 utils 文件中有一个像这样的方法

def validate_string(string):
regex = r"^[a-zA-Z-_áéíóúÁÉÍÓÚÑñ][a-zA-Z0-9-_áéíóúÁÉÍÓÚÑñ\s]*$"
# return True if re.search(regex, string) else False
if re.search(regex, string):
return True
else:
return False

我在 Django 基于类的 View 中使用它来验证一些输入字段

class ClassBassedView(View):
def post(self, request, *args, **kwargs):
name = self.request.POST['menu_new_name']
description = self.request.POST['menu_new_description']
fields = [[name, "El nombre"], [description, "La descripcion"]]
re_error = False

for item in fields:
if re.search("[!#%&;]", item[0]):
re_error = "{0} no puede contener los caracteres #, !, ;, % o &.".format(item[1])
break
elif validate_string(item[0]) is False:
print "(%s) (%s)" % (item[0], validate_string(item[0]))
re_error = "{0} solo puede contener letras, numeros y guiones medios y bajos. No puede iniciar con"\
" numeros.".format(item[1])
break

然后,举例来说,当我运行此 View 时,我发送发布值:

{'menu_new_name': "Hello", 'menu_new_description': "Éstíló"}

我得到了打印:

(Éstíló) (False)

但是当我从 shell 运行时

python manage.py shell 

我得到:

>>> from dathLog.utils import validate_string
>>> s = 'Éstíló'
>>> validate_string(s)
True
>>>
>>> import sys
>>> sys.version
'2.7.6 (default, Sep 9 2014, 15:04:36) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]'

我的正则表达式有问题吗?

最佳答案

在 Python 2.x 中,如果您使用国家字符,则应将正则表达式指定为 unicode:

regex = ur"^[a-zA-Z-_áéíóúÁÉÍÓÚÑñ][a-zA-Z0-9-_áéíóúÁÉÍÓÚÑñ\s]*$"

并且在 shell 上测试时也使用以下格式:

s = u'Éstíló'

关于python re.search 返回 None 和 Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com