这个正则表达式是否适用于xsd:anyURI

时间:2013-01-22 19:33:20

标签: python regex url

我正在实现一个函数(在Python中),它检查字符串与xsd:anyURI的一致性。

根据Schema Central,检查重复的,连续的和非连续的#个字符以及%后跟除了十六进制字符0-Ff之外的其他内容才有意义。

到目前为止,我有类似的东西,它似乎正在起作用:

if uri.search('(%[^0-9A-Fa-f]+)|(#.*#+)')

多个'#'符号的第二个表达式可能有问题。

2 个答案:

答案 0 :(得分:1)

如果您的目标是根据Schema Central解析器要求排除正则表达式,那么您几乎就在那里。上半部分,不包括未跟随两个十六进制数字的百分号,最好使用否定先行断言来解决;下半场很好,但你可以抛弃最后一个重复指标而不影响你的结果:

(%(?![0-9A-F]{2})|#.*#)

使用大小写独立性(i标志)编译你的正则表达式,你很高兴。

推荐阅读:Python标准库的chapter on Regular Expression Operation Syntax

答案 1 :(得分:0)

我最近不得不做出负面的预测,以下似乎有效:

(%.?[^0-9A-Fa-f]|#.*#)