我正在实现一个函数(用Python)来检查字符串是否符合xsd:anyURI
。这个正则表达式对于xsd是否正确:anyURI
根据Schema Central,只有检查重复,连续和非连续的#
字符和%
后面跟非十六进制字符0-Ff的内容才有意义。
到目前为止,我有这样的事情,它似乎是工作:
if uri.search('(%[^0-9A-Fa-f]+)|(#.*#+)')
多个第二个表达式“#”标志可能出现故障。
我正在实现一个函数(用Python)来检查字符串是否符合xsd:anyURI
。这个正则表达式对于xsd是否正确:anyURI
根据Schema Central,只有检查重复,连续和非连续的#
字符和%
后面跟非十六进制字符0-Ff的内容才有意义。
到目前为止,我有这样的事情,它似乎是工作:
if uri.search('(%[^0-9A-Fa-f]+)|(#.*#+)')
多个第二个表达式“#”标志可能出现故障。
如果您按照Schema Central解析器的要求针对排除正则表达式,那么您几乎就在那里。前半部分,不包括两个十六进制数字之后的百分号最好使用负向前瞻断言;下半年是好的,虽然你能够摆脱过去的重复指示,而不影响您的结果:
(%(?![0-9A-F]{2})|#.*#)
与独立性的情况下(i
标志)编译您正则表达式,你是好去。
推荐阅读:Python标准库的chapter on Regular Expression Operation Syntax。
最近,我不得不这样做没有负先行了,下面似乎工作:
(%.?[^0-9A-Fa-f]|#.*#)
看一看[官方定义](http://www.w3.org/ TR/xmlschema-2 /#anyURI) – Eric
'str.find'不带正则表达式字符串... – Eric