2013-01-22 50 views
1

我正在实现一个函数(用Python)来检查字符串是否符合xsd:anyURI这个正则表达式对于xsd是否正确:anyURI

根据Schema Central,只有检查重复,连续和非连续的#字符和%后面跟非十六进制字符0-Ff的内容才有意义。

到目前为止,我有这样的事情,它似乎是工作:

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

多个第二个表达式“#”标志可能出现故障。

+0

看一看[官方定义](http://www.w3.org/ TR/xmlschema-2 /#anyURI) – Eric

+0

'str.find'不带正则表达式字符串... – Eric

回答

1

如果您按照Schema Central解析器的要求针对排除正则表达式,那么您几乎就在那里。前半部分,不包括两个十六进制数字之后的百分号最好使用负向前瞻断言;下半年是好的,虽然你能够摆脱过去的重复指示,而不影响您的结果:

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

与独立性的情况下(i标志)编译您正则表达式,你是好去。

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

0

最近,我不得不这样做没有负先行了,下面似乎工作:

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

相关问题