使用正则表达式验证字符串(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.

可执行规范

regexp.story storytests 自动生成的文档。