Python 3.x 使用cerberus正则表达式验证以模式结尾的字符串

Python 3.x 使用cerberus正则表达式验证以模式结尾的字符串,python-3.x,validation,cerberus,Python 3.x,Validation,Cerberus,该库表示它允许正则表达式验证,但这似乎不适用于各种情况,文档也很少。在尝试验证字符串是否以“.csv”结尾的情况下,验证总是失败,甚至在搜索文件名本身的某些部分时也是如此。我假设cerberus在传入正则表达式的后端做了一些事情 # ----- # Import and print versions # ----- import sys print(sys.version) # >>> 3.7.4 (default, Aug 13 2019, 15:17:50) #

该库表示它允许正则表达式验证,但这似乎不适用于各种情况,文档也很少。在尝试验证字符串是否以“.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“
应该作为约束来解决您的问题。设计的基本原理是,多个匹配不是用例,明确整个字符串的结构比不知道要好。

这是有道理的,但这是否有文档记录?我所看到的是:“如果字段的值与提供的正则表达式不匹配,验证将失败。它只对字符串值进行测试。”。这句话似乎暗示任何找到匹配项的正则表达式都可以工作,而不是模式必须匹配整个字符串。如果文件中确实没有任何内容可以确认,我可能会在回购协议上开立一个问题,以更新文件。