Python Regex - 如何获取匹配的位置和值
- 2025-03-11 08:50:00
- admin 原创
- 56
问题描述:
如何使用re
模块获取所有匹配的起始和终止位置?例如,给定模式r'[a-z]'
和字符串'a1b2c3d4'
,我想要获取每个字母的位置。理想情况下,我还想获取匹配的文本。
解决方案 1:
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
解决方案 2:
摘自
正则表达式指南
span() 在单个元组中返回起始和结束索引。由于 match 方法仅检查 RE 是否在字符串开头匹配,因此 start() 将始终为零。但是,RegexObject 实例的 search 方法会扫描整个字符串,因此在这种情况下匹配可能不会从零开始。
>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)
结合:
在 Python 2.2 中,finditer() 方法也可用,它返回 MatchObject 实例序列作为迭代器。
>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
... print match.span()
...
(0, 2)
(22, 24)
(29, 31)
你应该能够做一些事情
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
解决方案 3:
对于 Python 3.x
from re import finditer
for match in finditer("pattern", "string"):
print(match.span(), match.group())
对于字符串中的每个匹配,您将获得`
`分离的元组(分别包含匹配的第一个和最后一个索引)和匹配本身。
解决方案 4:
请注意,正则表达式中的跨度和组已为多个捕获组建立索引
regex_with_3_groups=r"([a-z])([0-9]+)([A-Z])"
for match in re.finditer(regex_with_3_groups, string):
for idx in range(0, 4):
print(match.span(idx), match.group(idx))
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD