答案 0 :(得分:0)
你可能正在寻找正则表达式中的“超前”模式。例如:
sumb
收率:
import re
s = 'there is 1more 2go 3fold'
#
pat = re.compile('(?=[12])')
for m in pat.finditer(s):
print(m.start())
来自the docs:
(?= ...)匹配if ...匹配next,但不消耗任何字符串。 这称为先行断言。例如,Isaac(?= Asimov)将匹配 “艾萨克”只有在“阿西莫夫”之后才会出现。
对比其中一条评论,前瞻性表达不仅限于“固定长度字符串”,至少在我理解该描述的情况下。例如:
9
15
收率:
s = 'there is 1Fmore 1Gother 21go 3fold 3slambam'
pat = re.compile('(?=(1F|2|3sl.[mn]))')
for m in pat.finditer(s):
print(m.start(), repr(s[m.start():]))
这里的前瞻是一个相当广泛的不同长度的子模式,以及嵌入的通配符和它自己的子表达式。