2016-08-26 115 views
1

只是在這方面尋找一些確認,但似乎正則表達式的索引/位置編號不遵循python其餘部分使用的相同規則。Python正則表達式索引號

實施例:

pattern=re.compile('<HTML>') 
pattern.search("<HTML>") 

輸出:

<_sre.SRE_Match object; span=(0, 6), match='<HTML>'> 

爲什麼 「跨度=(0,6)」?

在Python中,字符串"<HTML>"只有6字符長,因此將返回一個錯誤指標試圖做這樣的事情的時候:

"<HTML>"[6] 
File "<stdin>", line 1, in <module> 
IndexError: string index out of range 

所以我相當肯定的答案是,這個跨度值對於匹配對象本質上不同於python數據結構的索引值。雖然匹配對象的跨度值從第一個字符的0開始(就像所有的python數據結構一樣),但最後一個字符總是endpos-1。

如果有人可以證實我的假設,也許可以解釋爲什麼這種差異存在,我將不勝感激。

+3

我確定你不是*實際上*通過正則表達式搜索HTML,這只是一個完整的例子,對吧? – Tomalak

+0

正確,這個例子適用於任何匹配的搜索模式。 –

+0

您是否有特定的背景要使用這個跨度數字? – Goufalite

回答

2

Python中的slice(span)是開放式的。所以"<HTML>and much more"[0:6]實際上返回"<HTML>"

+0

我看到了,所以跨越更像是一個切片而不是索引。 –

+0

仍然有點混亂,因爲它所呈現的格式看起來像索引而不是片段。例如(0,6)而不是[0:6]。我找不到明確指出這一點的文檔字符串中的任何內容。 –