(?= # Using a lookahead allows to restart matching even if a match has already been found, as a lookaround doesn't "consume" its content.
( # Using a capturing group allows to retrieve the match.
(?:a(?=a*(\2?+b)))+\2) # As an outer capturing group has been defined, thus numbered 1, we rewrite the inner part using the proper group 2.
)
)
import re
s='aaabbb'
def _all_sub(_s,_ss):
if not _ss:
return 0
else:
for i in range(0,len(_s),1):
pattern=r'{}'.format(_s[i:i+_ss[0]])
print(re.search(pattern,s))
return _all_sub(_s,_ss[1:])
print(_all_sub(s,list(range(len(s)))))
正如在评论中所说,
^(?:a(?=a*(\1?+b)))+\1$
允许使用广泛的regex功能匹配这种平衡的结构。你知道吗Demo
完整解释here。你知道吗
也就是说,如果要列出与平衡结构匹配的所有重叠子字符串,可以使用
(?=((?:a(?=a*(\2?+b)))+\2))
:Demo
这不是一个精确的解决方案,只是一个帮助你的提示。如果这段代码有用,您可以从中获得帮助。你知道吗
样本输出:
相关问题 更多 >
编程相关推荐