我正在试图找到例如p='gg'在s='ggggg'中出现的所有情况。根据我的计数,应该有4,因为除最后一个位置之外的任何位置都是一个子字符串。例如,s[1:2]是'gg'。然而,这两个方面都在努力:
>re.findall('gg','ggggg')
['gg','gg']
>list(re.finditer('gg','ggggg'))
[<_sre.SRE_Match object; span=(0, 2), match='ab'>,
<_sre.SRE_Match object; span=(6, 8), match='gg'>,
<_sre.SRE_Match object; span=(8, 10), match='gg'>]似乎是跳过潜在的匹配,一旦它找到一些匹配。因此,搜索例如“星星”或“开始”就相当于寻找开始,因为我永远找不到第二个,因为第一个是它的前缀.
这是个虫子吗?如何执行完整的子字符串搜索?
例2:
>re.findall('star|start','starting')
['star']
>list(re.finditer('star|start','starting'))
[<_sre.SRE_Match object; span=(0, 4), match='star'>](我正在使用Python 3,re version 2.2.1)
发布于 2021-02-15 13:44:29
发布于 2021-02-15 13:44:11
您可能搜索的关键字是“重叠”。下面是一个链接的问题具有重叠现象的字符串计数。
来自回复文档。
non-overlapping:返回字符串中模式的所有find_all匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,则这将是一个元组列表。结果中包含空匹配。
这似乎是一个特性,而不是一个bug。
您可以实现自己的搜索功能,例如:
def my_search(s, substr):
for i in len(s):
if s[i:].startswith(substr):
yield ihttps://stackoverflow.com/questions/66209100
复制相似问题