我试图找到字符串中的所有子字符串,并使用正则表达式打印它们的开始和结束索引
例如, 字符串='bbbcbb' sub='bb' 我必须得到(0,1)(1,2)(4,5)作为输出
import re
matches = list(re.finditer(r'bb(?=[a-zA-Z]|$)', 'bbbcbb'))
[<_sre.SRE_Match object; span=(0, 2), match='bb'>,
<_sre.SRE_Match object;span=(4, 6), match='bb'>]
我浏览了有关https://docs.python.org/3/library/re.html的文档,据我所知,lookahead断言将通过
为什么lookahead断言忽略(1,3)位置的b'bb'cbb?还是我对前瞻性断言的理解有缺陷
这与您的前瞻性无关,是由
re
不返回重叠匹配引起的。 下面是一个简单的例子:正确的方法是使用groups和lookahead,如下所述:Python regex find all overlapping matches?
模式
'bb(?=[a-zA-Z]|$)
将匹配2个字符,而不是1断言右边的是字符a-z或字符串的结尾使用re.finditer,您可能会更新模式以匹配单个
b
,并将单个b
置于正向展望中:结果
相关问题 更多 >
编程相关推荐