使用正则表达式验证字符串(Regex)
StrictYAML 可以验证正则表达式并返回字符串。如果正则表达式不匹配,则会引发异常。
from strictyaml import Regex, Map, load, as_document
from collections import OrderedDict
from ensure import Ensure
schema = Map({"a": Regex(u"[1-4]"), "b": Regex(u"[5-9]")})
正确解析
a: 1
b: 5
Ensure(load(yaml_snippet, schema)).equals({"a": "1", "b": "5"})
不匹配
a: 5
b: 5
load(yaml_snippet, schema)
strictyaml.exceptions.YAMLValidationError:
when expecting string matching [1-4]
found non-matching string
in "<unicode string>", line 1, column 1:
a: '5'
^ (line: 1)
不匹配后缀
a: 1 Hello
b: 5
load(yaml_snippet, schema)
strictyaml.exceptions.YAMLValidationError:
when expecting string matching [1-4]
found non-matching string
in "<unicode string>", line 1, column 1:
a: 1 Hello
^ (line: 1)
成功序列化
print(as_document(OrderedDict([("a", "1"), ("b", "5")]), schema).as_yaml())
a: 1
b: 5
序列化失败,正则表达式不匹配
as_document(OrderedDict([("a", "x"), ("b", "5")]), schema)
strictyaml.exceptions.YAMLSerializationError:
when expecting string matching [1-4] found 'x'
序列化失败,不是字符串
as_document(OrderedDict([("a", 1), ("b", "5")]), schema)
strictyaml.exceptions.YAMLSerializationError:
when expecting string matching [1-4] got '1' of type int.