regex - 查找包含特定子字符串序列的字符串,使用正则表达式之间的中断数量有限
问题描述
我正在寻找以下正则表达式:找到包含最长重复序列的字符串部分(如果存在),GGG
每个GGG
. 我尝试了以下模式,但效果不佳:((GGG).{0,10}?)*
CAGTTAGGGTTTAGGGTTAGGTTTAGGGTTAGGGTTAGGGTGAGGTGAGGGTGAGGGTTAGGGTGAGGGGTGAGGGGTTGGGGTTAGGGTTAGGGTTAGGAGTTGCAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTACTTTAGGGTTAGGGTTGGGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTACCTGCTTACTTGCTGCAGGGTTAGGGTTAGGGTTAGGGTTAAGTTAGGGTTTAGGGTTGGGGTTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGAGGTTAGGGTTAGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTGGGGTTAGGGGTTAGGGGTTGGGGGGGTTAGGGTTGGGGGTTGGGGGTTAGGGAGGGTTAGGGGTTGGGGGTTGCAGGGGTTAGGGTTAGGGGTTGGGGTTAGGGTTAGGGTTAGGGTTACCTTGGGGGTTGGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTAGGAGTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTTAGGGTTAGGGTTGGGGTTAGGGTTAGAGGTTAGGGTTAGGGGTTGGGGTTAGGGGTTGGGGGTTGGGGTTAGGGTTGCAGAAGGGGTTGAGCAGGGTGGGAGTTAGGGATTAGGGATTAGGAGTTAGGGTGAGGGTTAGGGTTAGGGTGGGGTGGGGATTGGGGATTGGGAGTTAGGGTGGGTGGGGATTGGGGAGTTAGGAGTTAGGAGTTAGGAGTTAGGGAGTTAGGTTAGGGAGTTAGGGTTAGGAGTTAGAGGTTAGGGTTAGGGTGGGAGTTAGGGAGTTAGGAGGTGGGGTTGGGGTTAGGGTTAGGAGTTAGGGTTAGGGTTAGGGTTAGGGATTGGGAGTTAGGGTAGGAGTTAGGGTTAGAGGTTAGGAGTTAGGGTTAGGAGTTAGGGATTAGAGGTTAGGGTGGGATTAGGAGTTACTTACTTAGGGAGTTAGGAGTTAGGAGTTAGGGTGGGGTGGGAGTTAGAGGTTAGGAGTTAGGAGTTAGGGTTAGGGTTAGGAGTTAAGGGTTAGGGATTAGGAGTTAGGGTTAGGGTTAGGAGTTAGGGAGTTAGGGTGGGGTGGGAGTTGCAGGGATTGGGTTAGGGTTAGGAGTTGGGAGTTGGGGAGTTGGGAGTTAGGGTTACAGGGTGGGAGTTAGGAGTTAGGGAGTTAGGAGTTAGAGGTTAGGGATTAGGGGT
解决方案
此模式将根据您的规则起作用:((?:GGG.{0,10}?)+GGG)
解释:
(
启动捕获组(?:
启动非捕获组GGG
字面上地.{0,10}?
任意字符 0-10 次,非贪婪
)
结束非捕获组+
匹配上一组 1 次或多次GGG
字面上地
)
结束捕获组
然后,您可以简单地使用re.findall
查找所有这些匹配项,并获得最长的匹配项max(key=len)
。
Python演示:
import re
string = "CAGTTAGGGTTTAGGGTTAGGTTTAGGGTTAGGGTTAGGGTGAGGTGAGGGTGAGGGTTAGGGTGAGGGGTGAGGGGTTGGGGTTAGGGTTAGGGTTAGGAGTTGCAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTACTTTAGGGTTAGGGTTGGGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTACCTGCTTACTTGCTGCAGGGTTAGGGTTAGGGTTAGGGTTAAGTTAGGGTTTAGGGTTGGGGTTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGAGGTTAGGGTTAGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTGGGGTTAGGGGTTAGGGGTTGGGGGGGTTAGGGTTGGGGGTTGGGGGTTAGGGAGGGTTAGGGGTTGGGGGTTGCAGGGGTTAGGGTTAGGGGTTGGGGTTAGGGTTAGGGTTAGGGTTACCTTGGGGGTTGGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTAGGAGTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTTAGGGTTAGGGTTGGGGTTAGGGTTAGAGGTTAGGGTTAGGGGTTGGGGTTAGGGGTTGGGGGTTGGGGTTAGGGTTGCAGAAGGGGTTGAGCAGGGTGGGAGTTAGGGATTAGGGATTAGGAGTTAGGGTGAGGGTTAGGGTTAGGGTGGGGTGGGGATTGGGGATTGGGAGTTAGGGTGGGTGGGGATTGGGGAGTTAGGAGTTAGGAGTTAGGAGTTAGGGAGTTAGGTTAGGGAGTTAGGGTTAGGAGTTAGAGGTTAGGGTTAGGGTGGGAGTTAGGGAGTTAGGAGGTGGGGTTGGGGTTAGGGTTAGGAGTTAGGGTTAGGGTTAGGGTTAGGGATTGGGAGTTAGGGTAGGAGTTAGGGTTAGAGGTTAGGAGTTAGGGTTAGGAGTTAGGGATTAGAGGTTAGGGTGGGATTAGGAGTTACTTACTTAGGGAGTTAGGAGTTAGGAGTTAGGGTGGGGTGGGAGTTAGAGGTTAGGAGTTAGGAGTTAGGGTTAGGGTTAGGAGTTAAGGGTTAGGGATTAGGAGTTAGGGTTAGGGTTAGGAGTTAGGGAGTTAGGGTGGGGTGGGAGTTGCAGGGATTGGGTTAGGGTTAGGAGTTGGGAGTTGGGGAGTTGGGAGTTAGGGTTACAGGGTGGGAGTTAGGAGTTAGGGAGTTAGGAGTTAGAGGTTAGGGATTAGGGGT"
pattern = re.compile(r"((?:GGG.{0,10}?)+GGG)")
longest = max(re.findall(pattern, string), key=len)
print(len(longest), longest)
输出:
583 GGGTTAGGGTTAGGGTTAGGGTTAAGTTAGGGTTTAGGGTTGGGGTTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGAGGTTAGGGTTAGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTGGGGTTAGGGGTTAGGGGTTGGGGGGGTTAGGGTTGGGGGTTGGGGGTTAGGGAGGGTTAGGGGTTGGGGGTTGCAGGGGTTAGGGTTAGGGGTTGGGGTTAGGGTTAGGGTTAGGGTTACCTTGGGGGTTGGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTAGGAGTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTTAGGGTTAGGGTTGGGGTTAGGGTTAGAGGTTAGGGTTAGGGGTTGGGGTTAGGGGTTGGGGGTTGGGGTTAGGGTTGCAGAAGGGGTTGAGCAGGGTGGGAGTTAGGGATTAGGG
编辑:如果你想在字符串
中至少有 51秒,你可以使用模式:来完成。GGG
((?:GGG.{0,10}?){50,}GGG)
推荐阅读
- python - TypeError: an integer is required when using Cython
- c - 用 ? 解释 C 表达式 : 和 >
- reactjs - Pnp Js 与 Sharepoint spfx ListItemPicker
- python - 姜戈 | 从每件商品的价格和金额生成总价?
- r - 如何根据 R 中另一列的权重重新调整列?
- java - 如何使用 JLabels 在 JFrame 中显示矩阵
- angular - 如何在我的服务中使用这个变量?(角度 10)
- java - 当涉及到 java 套接字时,我不明白 try catch 的范围
- entity-framework - 当属性 ApplyFormatInEditMode = true 时,具体值无法解析或超出范围
- android - 为什么要求在 android 模拟器上工作但不能在 google play store 应用程序上工作?