为什么Python正则表达式的跨度比实际匹配的跨度大一个位置?
查看我的正则表达式匹配返回的跨距,我注意到它们总是比实际匹配返回一个跨距;e、 g.在以下示例中: 打印(p.match('::message')) 没有一个 >>>m=p.search('::message');打印(m) >>>m.集团() “消息” >>>m.span() (4, 11) 示例中的结果范围是为什么Python正则表达式的跨度比实际匹配的跨度大一个位置?,python,regex,Python,Regex,查看我的正则表达式匹配返回的跨距,我注意到它们总是比实际匹配返回一个跨距;e、 g.在以下示例中: 打印(p.match('::message')) 没有一个 >>>m=p.search('::message');打印(m) >>>m.集团() “消息” >>>m.span() (4, 11) 示例中的结果范围是(4,11)与实际位置(4,10)。这给我带来了一些麻烦,因为左侧和右侧边界有不同的含义,我需要比较跨度的相对位置 有什么好的理由吗?或者我可以通过从右边界减去一来修改跨度以满足我的需
(4,11)
与实际位置(4,10)
。这给我带来了一些麻烦,因为左侧和右侧边界有不同的含义,我需要比较跨度的相对位置
有什么好的理由吗?或者我可以通过从右边界减去一来修改跨度以满足我的需要吗?因为在Python中,切片和范围永远不会是独占的,并且
'::message'[4:11]
反映了实际匹配的文本:
>>> '::: message'[4:11]
'message'
因此,您可以使用MatchObject.span()
结果从原始字符串中分割匹配的文本:
>>> import re
>>> s = '::: message'
>>> match = p.search(s)
>>> match.span()
(4, 11)
>>> s[slice(*match.span())]
'message'
因为在Python中,切片和范围从来都不是最终值,并且
:::message'[4:11]
反映了实际匹配的文本:
>>> '::: message'[4:11]
'message'
因此,您可以使用MatchObject.span()
结果从原始字符串中分割匹配的文本:
>>> import re
>>> s = '::: message'
>>> match = p.search(s)
>>> match.span()
(4, 11)
>>> s[slice(*match.span())]
'message'
这个答案应该是你的理解,这个答案应该是你的理解,我明白了,所以设计师们想要一种不分割任何东西的方法,而仍然提供索引。也就是说,他们希望“message”[x:x]返回空的。@Colin:没错;也可以看到一些有用的图表。我明白了,所以设计师想要一种方法,在仍然提供索引的情况下,什么都不分割。也就是说,他们希望“message”[x:x]返回空的。@Colin:没错;有关一些有用的图表,请参见。