亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Python 中使用正則表達式查找字符串中重復的子字符串?

如何在 Python 中使用正則表達式查找字符串中重復的子字符串?

婷婷同學_ 2023-02-07 09:35:42
我試圖在 DNA 序列中找到最長的連續重復 DNA 核苷酸鏈。DNA序列是一個字符串。因此,例如,如果我有"AGA",我想知道鏈中最長的連續重復鏈的長度"AGA"。我正在考慮使用正則表達式來提取核苷酸的所有重復鏈并將它們存儲在列表中(使用re.findall())。然后簡單地從它們中找出最長的鏈,取其長度并將其除以核苷酸序列的長度。我可以為此寫什么正則表達式?例如[AGA]+,我在想,但它會識別帶有 A或G或A 的子字符串。我想要類似的東西,以便它識別"AGA"并重復。注意:如果序列為AATGAGAAGAAGATCCTAGAAGAAGAAGAAGACGAT,則有兩條連續的鏈"AGA",一條長度為3,另一條長度為5。因此最長的鏈長度為5。
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您可以使用以下正則表達式的第一個匹配項:

r'((?:AGA)+)(?!.*\1)'

Python 代碼 < ˉ\ (ツ) /ˉ > 啟動你的引擎!

Python 的正則表達式引擎執行以下操作。

(          : begin capture group 1

  (?:AGA)  : match 'AGA' in a non-capture group

  +        : execute non-capture group 1+ times

)          : end capture group 1

(?!        : begin negative lookahead

  .*       : match any character other than line terminators 0+ times 

  \1       : match contents of capture group 1

)          : end negative lookahead

"AGA"如果字符串中的另一個字符串"AGA"'s 至少與候選字符串一樣長,則這將拒絕候選字符串's。


很可能有多個匹配項。例如,如果字符串是


AGAAGAAGATAGATAGAAGATAGA

^^^^^^^^^     ^^^^^^ ^^^

正如我在派對帽子上所指出的那樣,將會有三場比賽。由于匹配項的長度始終從左到右不遞減,因此任何匹配項都不會比第一個匹配項長。因此,我們可能會選擇第一個匹配項。


如果想要識別所有最長的匹配項(應該有多個具有最長長度的匹配項),可以使用上面的正則表達式來獲得一個匹配項,比方說,四個'ABA‘s,然后將字符串與正則表達式匹配r'(?:ABA){4}'。


查看完整回答
反對 回復 2023-02-07
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以使用表達式((AGA)\2*)regex101 ):

例如:

s = 'AATGAGAAGAAGATCCTAGAAGAAGAAGAAGACGAT'


to_find = 'AGA'


m = max(re.findall(r'(({})\2*)'.format(to_find), s), key=lambda k: k[0])[0]

print(m, len(m) // len(to_find))

印刷:


AGAAGAAGAAGAAGA 5


查看完整回答
反對 回復 2023-02-07
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

這是另一種查找匹配子序列的方法。

re.findall("(?:AGA)+", "AATGAGAAGAAGATCCTAGAAGAAGAAGAAGACGAT")


查看完整回答
反對 回復 2023-02-07
  • 3 回答
  • 0 關注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號