看看从我的正则表达式匹配返回的跨度,我注意到它们总是返回超过实际匹配的一个;例如,在正则表达式 HOWTO的示例中
>>> print(p.match('::: message'))
None
>>> m = p.search('::: message'); print(m)
<_sre.SRE_Match object at 0x...>
>>> m.group()
'message'
>>> m.span()
(4, 11)
Run Code Online (Sandbox Code Playgroud)
示例中生成的跨度(4, 11)与实际位置相对应(4, 10)。这给我带来了一些麻烦,因为左右边界具有不同的含义,我需要比较跨度的相对位置。
这样做有充分的理由吗?或者我可以继续根据自己的喜好修改跨度,从正确的边界中减去一个?
因为在Python中,切片和范围永远不会导致最终值总是排他的,并且'::: message'[4:11]反映实际匹配的文本:
>>> '::: message'[4:11]
'message'
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用MatchObject.span()结果从原始字符串中切片匹配的文本:
>>> import re
>>> s = '::: message'
>>> match = p.search(s)
>>> match.span()
(4, 11)
>>> s[slice(*match.span())]
'message'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |