我正在实现一个函数(在 Python 中),用于检查字符串是否符合xsd:anyURI
.
根据Schema Central,只有检查重复的、连续的和不连续的#
字符以及%
后跟十六进制字符 0-Ff 以外的字符才有意义。
到目前为止,我有类似的东西,它似乎正在工作:
if uri.search('(%[^0-9A-Fa-f]+)|(#.*#+)')
多个“#”符号的第二个表达式可能有问题。
我正在实现一个函数(在 Python 中),用于检查字符串是否符合xsd:anyURI
.
根据Schema Central,只有检查重复的、连续的和不连续的#
字符以及%
后跟十六进制字符 0-Ff 以外的字符才有意义。
到目前为止,我有类似的东西,它似乎正在工作:
if uri.search('(%[^0-9A-Fa-f]+)|(#.*#+)')
多个“#”符号的第二个表达式可能有问题。
如果您的目标是根据 Schema Central 解析器要求排除正则表达式,那么您就快到了。前半部分,不包括没有后跟两个十六进制数字的百分号,最好使用负前瞻断言来解决;后半部分很好,尽管您可以在不影响结果的情况下放弃最后一个重复指示器:
(%(?![0-9A-F]{2})|#.*#)
用大小写独立(标志)编译你的正则表达式,i
你很高兴。
推荐阅读:Python 标准库关于正则表达式操作语法的章节。
我最近不得不在没有消极前瞻的情况下这样做,以下似乎有效:
(%.?[^0-9A-Fa-f]|#.*#)