使用 cerberus 正则表达式验证以模式结尾的字符串
Using cerberus regex to validate string ends with pattern
cerberus 库说它允许进行正则表达式验证,但这似乎不适用于各种情况,而且文档很少。在尝试验证字符串是否以“.csv”结尾的实例中,验证总是失败,甚至在搜索文件名本身的部分时也是如此。我假设 cerberus 正在对传入的正则表达式进行后端处理。
# -----
# Import and print versions
# -----
import sys
print(sys.version)
# >>> 3.7.4 (default, Aug 13 2019, 15:17:50)
# [Clang 4.0.1 (tags/RELEASE_401/final)]
import cerberus
print(cerberus.__version__)
# >>> 1.3.2
# -----
# Define schema to check file extension is ".csv"
# -----
schema1 = {
'test': {
'type': 'string',
'regex': r'\.csv$'
}
}
schema2 = {
'test': {
'type': 'string',
'regex': r'\.csv$'
}
}
schema3 = {
'test': {
'type': 'string',
'regex': r'test'
}
}
# -----
# Instantiate validation and run examples
# -----
v = cerberus.Validator()
print(v.validate({'test': 'test.csv'}, schema1))
# >>> False
print(v.validate({'test': 'test.csv'}, schema2))
# >>> False
print(v.validate({'test': 'test.csv'}, schema3))
# >>> False
事实上,Cerberus 无论如何都会向约束添加一个 $
后缀,因此 r".*\.csv"
应该可以作为约束来解决您的问题。设计原理是,多个匹配不是用例,明确整个字符串的结构总比一无所知要好。
cerberus 库说它允许进行正则表达式验证,但这似乎不适用于各种情况,而且文档很少。在尝试验证字符串是否以“.csv”结尾的实例中,验证总是失败,甚至在搜索文件名本身的部分时也是如此。我假设 cerberus 正在对传入的正则表达式进行后端处理。
# -----
# Import and print versions
# -----
import sys
print(sys.version)
# >>> 3.7.4 (default, Aug 13 2019, 15:17:50)
# [Clang 4.0.1 (tags/RELEASE_401/final)]
import cerberus
print(cerberus.__version__)
# >>> 1.3.2
# -----
# Define schema to check file extension is ".csv"
# -----
schema1 = {
'test': {
'type': 'string',
'regex': r'\.csv$'
}
}
schema2 = {
'test': {
'type': 'string',
'regex': r'\.csv$'
}
}
schema3 = {
'test': {
'type': 'string',
'regex': r'test'
}
}
# -----
# Instantiate validation and run examples
# -----
v = cerberus.Validator()
print(v.validate({'test': 'test.csv'}, schema1))
# >>> False
print(v.validate({'test': 'test.csv'}, schema2))
# >>> False
print(v.validate({'test': 'test.csv'}, schema3))
# >>> False
事实上,Cerberus 无论如何都会向约束添加一个 $
后缀,因此 r".*\.csv"
应该可以作为约束来解决您的问题。设计原理是,多个匹配不是用例,明确整个字符串的结构总比一无所知要好。