假设:
string="aacctcaaaca"
find="aaa"
我想找出所有的find。
通常我会
re.findall(find, string)
问题是字符串是循环的,即字符串的开始/结束是不相关的。因此,由前两个+最后一个a组成的“aaa”也应该被计算在内。
另外,我想找到比赛的开始位置(上面例子中的6和10)
我在考虑将string[0:len(find)-1]添加到string中,并对新字符串执行re,即
re.findall(find, string+string[0:len(find)-1])
听起来对吗?还有其他想法/建议吗?
2条答案
按热度按时间nzk0hqpo1#
你目前的做法似乎完全合理。另一种选择是只连接整个字符串,并忽略 Package 后开始的任何匹配。
例如:
这是一个更好的扩展,因为你可以使用一个任意的正则表达式,如
a{3,}
,你可能无法依赖于len(find)
。正如mgilson在评论中建议的那样,你可以使用itertools来使它更有效,这样你就不会发现不必要的重复匹配。
它看起来像这样:
请注意,这将返回匹配对象的可迭代对象,而不是匹配子字符串的列表。
nkhmeac62#