如何使用re
模块获取所有比赛的开始和结束位置?例如,给定模式r'[a-z]'
和字符串'a1b2c3d4'
我想要获得它找到每个字母的位置.理想情况下,我也希望得到比赛的文字.
import re p = re.compile("[a-z]") for m in p.finditer('a1b2c3d4'): print(m.start(), m.group())
取自
正则表达式HOWTO
span()在单个元组中返回开始和结束索引.由于匹配方法仅检查RE是否在字符串的开头匹配,因此start()将始终为零.但是,RegexObject实例的搜索方法会扫描字符串,因此在这种情况下匹配可能不会从零开始.
>>> p = re.compile('[a-z]+') >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m>>> m.group() 'message' >>> m.span() (4, 11)
将其与:
在Python 2.2中,finditer()方法也可用,返回一系列MatchObject实例作为迭代器.
>>> p = re.compile( ... ) >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator>>> 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()
对于Python 3.x
from re import finditer for match in finditer("pattern", "string"): print(match.span(), match.group())
\n
对于字符串中的每个匹配,您将获得分离的元组(分别包括匹配的第一个和最后一个索引)和匹配本身.