2013-01-22 49 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]|#.*#)

相關問題